使用Calendar实现自定义日历

使用Calendar实现自定义日历,第1张

在日常的工作中,很多时候的需求不是一个默认日历能够胜任的,虽然很多时候可以去GitHub上面搜索相关的库,但是总是会有一些局限性,这个时候就想到了自己来写一个日历控件,这样又方便还符合自己APP的主题,两全其美。

废话不多说,先上图:

1、ViewPager肯定是首要的,因为我们的日历需要能够左右滑动切换

2、最最重要的当然是Calendar啦,它能够很好的帮助我们获取需要的时间

1、set方法:通过名字我们也知道这是一个赋值的方法,那么怎么使用呢?

2、getActualMaximum:获取给定日历字段的可能最大值

3、add方法:添加

现在我们知道了1号需要的位置和总天数,那么数据源就有了

一个简单的日历就有了,通过Calendar类,我们可以很方便的得到我们想要的数据

delphi 中日期显示选择的控件有两个: Calendar 和 MonthCalendar。

Calendar 控件在 Samples 组下,而 MonthCalendar 组件在 Win32 组下面,如下图所示:

两者的功能,都是显示一个月历,功能相仿,MonthCalendar 功能和显示更丰富友好一些:

从代码编写的角度来看,两者的区别较大:

TMonthCalendar 继承自 TCommonCalendar,而 TCommonCalendar 继承自 TWinControl:

TCalendar 继承自 TCustomGrid,也就是说,其实 Calendar 组件就是简单的表格:

在日历控件里面加onselectionchanged="Calendar1_SelectionChanged"

后台

protected void Calendar1_SelectionChanged(object sender, EventArgs e)

{

TextBox1Text = Calendar1SelectedDateToString("yyyy-MM-dd");

}

当前日期是默认的,Textbox1可以在Page_Load里面加一句

在数据库设计中,从用户角度出发,在一些日期的输入时,如果直接利用系统中的activex控件中的“日历控件”并将其与相关数据绑定,就会使这些 *** 作变得比较简单、直观,还可以减少误 *** 作,使 *** 作与视觉界面更具人性化。由于这方式源于微软公司的windows、源于常用的office,与word、excel相近,而且这些只是对窗体界面做了改变,对数据库的结构不作改动。所以可以在数据库需要的部分作为修改添加,不影响数据库整体运行。

以图书管理中的借阅记录的输入-access

2003版-为例(access

2007版和2010版类似):

打开“借阅记录的输入”窗体,进入设计视图,单击“插入”,在下拉菜单中选择“activex控件”,如图-1所示:

图-1:插入activex控件

在d出的“插入

activex控件”对话框中选择“日历控件110”,如图-2所示(最后的序号视版本不同而异):

图-2:插入activex日期控件

按确定后日历控件即插入窗体之中,此时可调整日历的位置、边框颜色、粗细等属性,如图-3所示:

图-3:调整activex日期控件的位置、大小、边框等属性

现在要将日历控件中的数据与“借阅日期”绑定,以便“借阅日期”文本框中的日期与日历控件中显示的日期一样:在设计视窗中选定日历控件,此例的日历控件名称为calendar4(最后编号视实际情况而异),打开日历控件的属性表,在属性表选项卡中切换到“数据”选项卡,在“控件来源”下拉列表中选择“借阅日期”,如图-4所示。还可以调整日历控件的其它属性,然后保存窗体并关闭。

图-4:将日历控件中的数据与“借阅日期”绑定

当你再打开这个窗体时,“借阅日期”文本框中的日期与日历控件中显示的日期已经捆绑,当你在日历中选定一个日期后,点击借阅日期文本框,这个选定的日期就会自动置入借阅日期的文本框。

对于还书日期的输入,在插入窗体控件后,将其与“实际还书日期”绑定,如图-5所示:

图-5:将日历控件中的数据与“实际还书日期”绑定

对于借阅明细的查阅与修改中,既有借阅日期也有还书日期,这时可以插入2个日期控件,当然它们的名称不会一样,分别将这两个日期控件与“借阅日期”与“实际还书日期”绑定,它们就会同步运行,以颜色加以区分,如图-6所示:

图-6:将两个日历控件中的数据与“借阅日期”及“实际还书日期”分别绑定

当然这些完全可以借助vba来实现,但这种设置方式比较直观、简单,对于初学者比较容易掌握。

本数据库对类似这样需要日期输入的窗体都使用了日历控件的绑定相应文本框的方式。这就可以完全使用鼠标或触摸屏触摸板进行输入,免去了使用键盘的麻烦。

用 calender的下面这个事件,下面代码实现的是,当进入某一月时,动态查询当前用户的日程,并显示在该日期上,对于你说的悬浮鼠标显示的话,需要进行些改动。但愿对你有所帮助。

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)

{

CalendarDay calDay = eDay; //控件中的日期

TableCell tc = eCell; //每个单元格中的日期

string nowTime = stringEmpty;

if (calDayIsOtherMonth) //判断此日期是否是其他月的

{

tcControlsClear(); //清空

}

else

{

// 使单数与双数一样对应

//Label lblPace= new Label();

//if (ConvertToInt32(calDayDayNumberText) < 10)

//{

// lblPaceText = " " + " " + " " + " " + " ";

//}

//else

//{

// lblPaceText = " " + " " + " ";

//}

//加入农历日期

Label lblNLDay = new Label();

lblNLDayText = "<br>" + NLDayGetLunarCalendar(calDayDate);

//tcControlsAdd(lblNLDay);

//加入当前的日程

nowTime = calDayDateToShortDateString();

//加入链接图标

//HyperLink hlkAddSchedule = new HyperLink();

//hlkAddScheduleImageUrl = "~/Images/AddSchulegif";

//hlkAddScheduleToolTip = "新增个人日程";

//hlkAddScheduleNavigateUrl = "AddWorkPlanaspxcreateTime=" + calDayDateToShortDateString();

HyperLink hlkSchedule =null;

//如果有日程则显示内容

List<WorkPlan> list = WorkPlanManagerGetWPByCreateTime(nowTime, 1);

if (listCount > 0)

{

for (int i = 0; i < listCount; i++)

{

hlkSchedule = new HyperLink();

WorkPlan wp = (WorkPlan)list[i];

string scheduleUrl = stringFormat("MyWorkPlanaspxtime=" + nowTime);

string style = "@"+wpWTitle;

if (wpDegreeEquals('1'))//级别为重要时

{

style = "<span color='Red'># " + wpWTitle + "</span>";

}

if (wpIsCompleteEquals("1"))

{

style = "<span color='Red'># " + wpWTitle + "</span><img src='/Images/okPlanjpg' width='20px' height='20px'/>";

}

hlkScheduleText = "<br>" + style + "" + "<br>";

//hlkScheduleNavigateUrl = scheduleUrl;

tcControlsAdd(hlkSchedule);

}

}

//tcControlsAdd(lblPace);

// tcControlsAdd(hlkAddSchedule);

//tcControlsAdd(hlkSchedule);

}

//string UId=Session

eCellAttributes["onmouseover"] = "javascript:currentColor=thisstylebackgroundColor; thisstylecursor='hand';backgroundColor='#AFEEEE';";

eCellAttributes["onmouseout"] = "javascript:thisstylebackgroundColor=currentColor;";

eCellAttributes["onclick"] = "javascript:thisstylecursor='hand';windowlocation='ScanWorkPlanaspxtime=" + nowTime + "&UId="+1+"';";

}

《WPF揭秘》里有这个办法(中文版260页):

=============

string xaml = XamlWriterSave(someControlTemplate);

//XamlWriter在SystemWindowsMarkup命名空间下。

以上就是关于使用Calendar实现自定义日历全部的内容,包括:使用Calendar实现自定义日历、delphi中calendar控件在哪和monthcalendar相同吗、ASP.NET:将TextBox绑定日历Calendar控件,运行时,默认显示当天日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9747841.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存