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

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

成员名称 说明
Nowhere 指定点或者不在月历控件上,或者在控件的非活动部分。
TitleBackground 指定点在月标题的背景上。
TitleMonth 指定点在月标题栏中的月名称上。
TitleYear 指定点在年值上月的标题栏中。
NextMonthButton 指定点在控件右上角的按钮上。如果用户单击此处,则月历将其显示滚动到下一个月或下一组月。
PrevMonthButton 指定点在控件左上角的按钮上。如果用户单击此处,则月历将其显示滚动到上一个月或上一组月。
CalendarBackground 指定点是日历的背景的组成部分。
Date 指定点在日历中的某一日期上。 MonthCalendar . . :: . HitTestInfo Time 属性设置为指定点处的日期。
NextMonthDate 指定点在下一个月(部分显示在当前所显示月份的顶部)的某个日期上。如果用户单击此处,则月历将其显示滚动到下一个月或下一组月。
PrevMonthDate 指定点在前一个月(部分显示在当前所显示月份的顶部)中的某个日期上。如果用户单击此处,则月历将其显示滚动到上一个月或上一组月。
DayOfWeek 指定点在日期缩写(例如,“Fri”)上。 MonthCalendar . . :: . HitTestInfo Time 属性设置为 0001 年 1 月 1 日。
WeekNumbers 指定点在周数上。只有在启用了 MonthCalendar ShowWeekNumbers 属性时,这才会发生。 MonthCalendar . . :: . HitTestInfo Time 属性设置为最左侧的列中对应的日期。
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);
                    haveHitTitleCnt--;
            if (hitInfo.HitArea == MonthCalendar.HitArea.TitleBackground)
                if (haveHitTitleCnt < 3)//最大到3
                    haveHitTitleCnt++;
                    转载:http://www.cnblogs.com/TrueElement/archive/2012/01/11/2319991.html 感谢原作者。写个小应用,主要是方便选中日期到datagridview,就想到利用MonthCalendar显示一个月历,然后利用鼠标点击选择。实现的方法主要是利用了mousedown事件以及MonthCalendar的HitTest()方法。
				
MonthCalendar控件是一个日历控件,是系统提供好的是我们可以用可视化的方式来实现日期选择,这个控件主要就是一些属性的设置,没有什么需要特别注意的地方,完整的属性最好还是参考官方,网址如下MonthCalendar Class 下面我们还看看这个控件是如何使用的 1.界面布局 界面布局如下 控件比较简单,就是一个MonthCalendar,一个Label和一个Textbox FirstDayOfWeek:面板展示周期的循序,一周的第一天由从周几开始排列; MaxDate:可以为月历控件选择的最大日期; MinDate:可以为月历控件选择的最小日期; SelectionRange:的字符串; MaxSelectionCount:可为该控件选择的...
你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 04-28
转载:http://dev.mjxy.cn/a-Calendar-calendar-control-multiple-dates-selection.aspx //处理Calendar1的SelectionChanged事件 protected void Calendar1_SelectionChanged(object sender, EventArgs e) { ...
MonthCalendar控件用来显示或设置系统时间、系统日期,显示内容包括了月份是日期。在该控件中,以矩阵形式显示内容,每行7列,与每周长度一致。默认情况下,显示调整时间日期的箭头,方便用户操作。 MonthCalendar控件的常用属性及说明
python3.11的datetime模块中calendar.monthcalendar()函数的作用?以列表方式写出该函数必传参数和所有可选参数并说明含义?一个简单的案例并加上注释?
`calendar.monthcalendar(year, month)` 函数的作用是返回一个表示指定年份和月份的日历的嵌套列表。每个子列表表示一周,其中每个元素表示该周的某一天。该函数返回的列表中包含的天数是由该月份的第一个星期的第一天(通常是星期一)的日期决定的。 必传参数: - `year`:指定的年份,必须是一个整数。 - `month`:指定的月份,必须是一个整数,范围从1(1月)到12(12月)。 可选参数: - `w`:指定每行显示的天数,默认值为7。 - `l`:指定每周的行数,默认值为6。 下面是一个简单的案例: ```python import calendar # 返回2022年1月的日历 calendar_data = calendar.monthcalendar(2022, 1) # 打印日历 for week in calendar_data: for day in week: if day == 0: print(" ", end="") else: print(f"{day:2d}", end=" ") print() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31