Skip to content

MonthView 类 ​

MonthView 是一个全月日历网格:一个 MonthColumns × MonthRows 月面板的可见矩阵,可通过月标题向前和向后导航,带可选的今日指示器、周数和通过 GetDayBold 回调事件的粗体日期高亮。与 DTPicker --- 仅显示其内联值字段并按需弹出日历 --- 不同,MonthView 始终在窗体上可见。

vb
Private Sub Form_Load()
    MonthView1.MonthColumns = 2
    MonthView1.MonthRows = 1
    MonthView1.MultiSelect = True
    MonthView1.MaxSelCount = 7
    MonthView1.ShowWeekNumbers = True
End Sub

Private Sub MonthView1_SelChange( _
        ByVal StartDate As Date, ByVal EndDate As Date, Cancel As Boolean)
    Debug.Print "Selection: " & StartDate & " to " & EndDate
End Sub

Private Sub MonthView1_GetDayBold( _
        ByVal StartDate As Date, ByVal Count As Integer, State() As Boolean)
    Dim i As Integer
    For i = 1 To Count
        State(i) = IsHoliday(DateAdd("d", i - 1, StartDate))
    Next
End Sub

控件从 BaseControlFocusable 继承可聚焦矩形可停靠成员 --- 大小、位置、Anchors、Dock、Font、Appearance、MousePointer / MouseIcon、ToolTipText、Drag、Refresh、SetFocus、TabIndex / TabStop、ZOrder、CausesValidation、VisualStyles、hWnd、HelpContextID / WhatsThisHelpID。

多月布局 ​

MonthView 可以同时显示多个日历面板。MonthColumns 和 MonthRows 设置面板网格(默认 1 × 1);当 ResizeToFit 为 True(默认)时,控件根据当前 Font 和 ShowToday / ShowWeekNumbers 选项自动调整 Width 和 Height 以适应请求的网格。将 ResizeToFit 设为 False 允许应用程序自由调整控件大小,日历面板排列以适应可用空间。

GetMonthRange 返回所有面板中当前可见的日期范围 --- 在 GetDayBold 中很有用,用于了解需要填充哪些天。

单日和多日选择 ​

当 MultiSelect 为 False(默认)时,用户一次只能选择一个日期,Value、SelStart 和 SelEnd 都返回相同值。当 MultiSelect 为 True 时,用户可以拖选最多 MaxSelCount 天的连续范围;SelStart 和 SelEnd 界定范围,Value 返回 SelStart。

运行时更改 MultiSelect 会重新创建底层Win32窗口 --- 该属性无法仅通过 GWL_STYLE 切换。

粗体日期高亮 ​

GetDayBold 事件在每次可见范围更改后触发,询问应用程序哪些天应以粗体渲染。应用程序用 True / False 填充可见范围内每一天的 State 数组;控件随后缓存结果直到用户导航到不同范围。要强制打开或关闭个别日期而无须重新触发整个事件,请使用 DayBold(date)= boolean。

属性 ​

Appearance ​

控件边框的绘制方式。AppearanceConstants 的成员:vbAppearFlat 或 vbAppear3d。默认:vbAppear3d。继承。

BackColor ​

日历面板的主要背景颜色。OLE_COLOR。默认:vbWindowBackground。

BorderStyle ​

控件的边框样式。ControlBorderStyleConstants 的成员:vbNoBorder 或 vbFixedSingleBorder。默认:vbFixedSingleBorder。

CalendarCount ​

底层控件正在渲染的日历面板数。Byte,只读。通常等于 MonthColumns × MonthRows。

Day ​

Value 的月中第几天分量。Integer(1--31)。参见 DayCount。

DayBold(date) ​

可见范围内特定日期是否以粗体渲染。Boolean,读/写。设置器更新底层日期状态位掩码并重新应用;读取返回实时缓存值。

语法:object.DayBold(date)[ = boolean ]

date
当前可见范围内的一个 Date。超出范围的日期引发运行时错误 380。

DayCount ​

当前值所在月份的天数。Long,只读。

DayOfWeek ​

当前 Value 是星期几,作为 VbDayOfWeek 的成员。只读。

ForeColor ​

用于普通日期的文本颜色。OLE_COLOR。默认:vbButtonText。

MaxDate ​

可导航日期范围的上限。Date。默认:9999-12-31。赋值低于 MinDate 时引发运行时错误 35775。

MaxSelCount ​

当 MultiSelect 为 True 时用户可以选择的最大连续天数。Long。默认:7。

MinDate ​

可导航日期范围的下限。Date。默认:1753-01-01。

Month ​

Value 的月份分量。Integer(1--12)。

MonthBackColor ​

用于日期单元格的背景颜色。OLE_COLOR。默认:vbWindowBackground。与 BackColor 不同,后者覆盖多个面板排列时的周围区域。

MonthColumns ​

水平排列的日历面板数。Long。默认:1。当 ResizeToFit 为 True 时,更改此值会触发大小调整。

MonthRows ​

垂直排列的日历面板数。Long。默认:1。

MultiSelect ​

用户是否可以选择连续多天。Boolean。默认:False。运行时更改此属性会重新创建底层Win32窗口。

ResizeToFit ​

控件是否根据当前 Font 自动调整大小以适应请求的 MonthColumns × MonthRows 网格。Boolean。默认:True。

RightToLeft ​

INFO

RightToLeft 标记为 [Unimplemented],对底层控件的渲染方向无效。

一个 Boolean。

ScrollRate ​

导航箭头滚动可见范围的月数。Long。默认:0 --- 表示"使用日历的自然宽度"(通常为 MonthColumns)。传入正整数以覆盖。

SelEnd ​

当前选择范围的结束日期。Date,读/写。当 MultiSelect 为 False 时,SelEnd 等于 SelStart 并等于 Value。

SelStart ​

当前选择范围的开始日期。Date,读/写。等于 Value。

ShowToday ​

日历是否在底部显示"Today: …"行。Boolean。默认:True。

ShowTodayCircle ​

日历是否用圆圈高亮今日日期。Boolean。默认:True。

ShowTrailingDates ​

日历是否显示上月末和下月初的日期。Boolean。默认:True。

ShowWeekNumbers ​

日历是否在每个面板的左侧显示周数列。Boolean。默认:False。

StartOfWeek ​

一周中的哪一天渲染为最左列。VbDayOfWeek 的成员。默认为系统的一周起始日设置。

TitleBackColor ​

标题栏(月份名称 + 年份标题)背景颜色。OLE_COLOR。默认:vbActiveTitleBar。

TitleForeColor ​

标题栏文本颜色。OLE_COLOR。默认:vbActiveTitleBarText。

TrailingForeColor ​

当 ShowTrailingDates 为 True 时用于相邻月份尾随日期的文本颜色。OLE_COLOR。默认:vbGrayText。

Value ​

当前选定的开始日期。Date。默认成员。

读取返回 SelStart。赋值触发 SelChange(处理程序可取消更改)。赋值超出 [MinDate, MaxDate] 的日期引发运行时错误 35773。

VisibleDays(sIndex) ​

所有可见面板中第 sIndex 个单元格的日期。Date,只读。

语法:object.VisibleDays(sIndex)

sIndex
一个从1开始的索引,介于1和 GetMonthRange 返回的总单元格数之间。

Week ​

当前 Value 一年中的第几周。Integer(1--53)。

Year ​

Value 的年份分量。Integer。

方法 ​

GetMonthRange ​

返回所有面板中的第一个和最后一个可见日期。

语法:object.GetMonthRange(IncludeTrailing, [StartDate] [, EndDate])As Long

IncludeTrailing
一个 Boolean。为 True 时,范围包括上月的尾随日期和下月的首导日期,这些日期渲染在第一个/最后一个面板中(用于 GetDayBold 填充)。为 False 时,范围仅覆盖属于可见月份列的天数。
StartDate
输出 一个接收第一个可见日期的 Date。
EndDate
输出 一个接收最后一个可见日期的 Date。

返回可见范围内的月份数。

事件 ​

Click ​

任何未命中日期单元格的鼠标点击时触发。

语法:object_Click( )

DateClick ​

用户点击日期单元格时触发。被点击的日期作为参数传入。

语法:object_DateClick(ByVal DateClicked As Date)

DateDblClick ​

用户双击日期单元格时触发。

语法:object_DateDblClick(ByVal DateDblClicked As Date)

DblClick ​

任何未命中日期单元格的双击时触发。

语法:object_DblClick( )

DragDrop, DragOver ​

继承的拖放事件。

GetDayBold ​

每次可见范围更改时触发,要求应用程序填充 State 数组以指定哪些天应以粗体渲染。第一个数组索引为 1;数组从 StartDate 到 StartDate + Count − 1。

语法:object_GetDayBold(ByVal StartDate As Date,ByVal Count As Integer,State( ) As Boolean)

StartDate
可见范围内的第一天(包括上月的尾随日期)。
Count
可见范围内的总天数。
State
一个 Boolean 数组,从1开始索引,处理程序将应粗体的每一天设为 True。

GotFocus, LostFocus ​

继承的焦点事件。

Initialize ​

控件窗口创建并从持久化状态初始化属性后触发。每次窗体加载触发一次。

KeyDown, KeyPress, KeyUp ​

继承的键盘事件。

MouseDown, MouseMove, MouseUp ​

继承的鼠标事件。

OLECompleteDrag, OLEDragDrop, OLEDragOver, OLEGiveFeedback, OLESetData, OLEStartDrag ​

继承的OLE拖放事件。

SelChange ​

选择更改时触发。将 Cancel 设为 True 将选择回滚到先前范围(控件恢复旧的 SelStart / SelEnd)。

语法:object_SelChange(ByVal StartDate As Date,ByVal EndDate As Date,Cancel As Boolean)

Validate ​

继承的验证事件。

另见 ​

twinBASIC及其LOGO版权为作者"韦恩"所有