博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MonthCalendar的mousedown方法选择日期
阅读量:6278 次
发布时间:2019-06-22

本文共 2098 字,大约阅读时间需要 6 分钟。

    写个小应用,主要是方便选中日期到datagridview,就想到利用MonthCalendar显示一个月历,然后利用鼠标点击选择。实现的方法主要是利用了mousedown事件以及MonthCalendar的HitTest()方法。

    说说HitTest() 方法先,这个方法返回MonthCalendar ..::. HitTestInfo 类型,这种类型里面包含3种属性:HitAreaPointTime。其中HitArea是一个枚举,包含

成员名称 说明
Nowhere 指定点或者不在月历控件上,或者在控件的非活动部分。
TitleBackground 指定点在月标题的背景上。
TitleMonth 指定点在月标题栏中的月名称上。
TitleYear 指定点在年值上月的标题栏中。
NextMonthButton 指定点在控件右上角的按钮上。如果用户单击此处,则月历将其显示滚动到下一个月或下一组月。
PrevMonthButton 指定点在控件左上角的按钮上。如果用户单击此处,则月历将其显示滚动到上一个月或上一组月。
CalendarBackground 指定点是日历的背景的组成部分。
Date 指定点在日历中的某一日期上。的 属性设置为指定点处的日期。
NextMonthDate 指定点在下一个月(部分显示在当前所显示月份的顶部)的某个日期上。如果用户单击此处,则月历将其显示滚动到下一个月或下一组月。
PrevMonthDate 指定点在前一个月(部分显示在当前所显示月份的顶部)中的某个日期上。如果用户单击此处,则月历将其显示滚动到上一个月或上一组月。
DayOfWeek 指定点在日期缩写(例如,“Fri”)上。的 属性设置为 0001 年 1 月 1 日。
WeekNumbers 指定点在周数上。只有在启用了 的 属性时,这才会发生。 的 属性设置为最左侧的列中对应的日期。
TodayLink 指定点在月历控件底端的今日链接上。

例如:

tmp.HitTest(e.Location) {System.Windows.Forms.MonthCalendar.HitTestInfo}     HitArea: Date     Point: {X = 136 Y = 97}     Time: {
2012/7/1 0:00:00}

而当连续点击到TitleBackground(上面的 “2012年1月”那个区域)时,月历会变成如下:

0次 1次 2次 3次

所以,根据这些情况,写了以下一个mousedown事件处理方法:

private byte haveHitTitleCnt = 0;//标题栏点击计数         private void monthCalendar1_MouseDown(object sender, MouseEventArgs e)         {
MonthCalendar tmp = (MonthCalendar)sender; MonthCalendar.HitTestInfo hitInfo = tmp.HitTest(e.Location); if (hitInfo.HitArea == MonthCalendar.HitArea.Date) {
if (haveHitTitleCnt == 0) {
this.dataGridView1.Rows.Add(this.monthCalendar1.SelectionStart.Date.ToShortDateString(), true, false); } else {
haveHitTitleCnt--; } } if (hitInfo.HitArea == MonthCalendar.HitArea.TitleBackground) {
if (haveHitTitleCnt < 3)//最大到3 {
haveHitTitleCnt++; } } }

还有,为了完整一些,将

this.monthCalendar1.MaxSelectionCount = 1;

点击其他部分,像TodayLink,不会引起date部分haveHitTitleCnt变化(即date显示层次(年、月、日)变化),所以就不用处理这些地方了。

转载于:https://www.cnblogs.com/TrueElement/archive/2012/01/11/2319991.html

你可能感兴趣的文章
两数之和---简单
查看>>
Linux文本处理三剑客之grep
查看>>
SQL Server 可疑的解决办法
查看>>
匿名函数
查看>>
大数加法
查看>>
python第二天
查看>>
Kaggle(一):房价预测
查看>>
Android开发历程_10(LayoutAnimationController的初步使用)
查看>>
apache https 伪静态
查看>>
FileUtil
查看>>
[CQOI 2014] 数三角形 & 机械排序臂
查看>>
用程序实现全排列(二)
查看>>
CF 917A The Monster 【括号匹配】
查看>>
113. 路径总和 II
查看>>
Python基础--day02
查看>>
盘点让人崩溃的表单样式之 (行列置换)
查看>>
iphone中Button的currentTitle和titleLabel.text的使用
查看>>
linux下的三种解压文件的命令?
查看>>
JDeveloper 滚轮不受控制
查看>>
恒生电子2018.10企业招聘题目
查看>>