我最近需要在一个项目中使用MonthCalendar,但是这个控件看起来真的很有限,我不能用它做我想做的事情。所以如果你能给我一些建议,那将是非常有帮助的。
因此,我想要做的是选择多个日期,然后当我单击一个按钮时,这些日期将保存在一个数组中,并在日历上禁用(或者至少它们的单元格背景变为红色)。
我已经做的是允许多个选择(MaxSelectionCount = 31),并且我写了几行代码来获得选择的日期:
Dim nbrJours As Integer = MonthCalendar1.SelectionRange.End.Day - MonthCalendar1.SelectionRange.Start.Day
For jour As Integer = 0 To nbrJours
MsgBox(jour + MonthCalendar1.SelectionRange.Start.Day & "/" & MonthCalendar1.SelectionRange.Start.Month & "/" & MonthCalendar1.SelectionRange.Start.Year)
Next嗯,它不是很干净,但它是有效的,我想我只需要在将所有字符串转换成日期后将它们保存到一个数组中。
那么,假设我所有的日期都在一个数组中,如何在MonthCalendar中禁用数组中包含的日期呢?
感谢您的阅读,并为我糟糕的英语道歉,这不是我的母语。
发布于 2015-01-07 23:57:40
该控件本身只支持将日期设置为粗体或非粗体。您需要一个不同的日历控件来以红色突出显示日期。
但是,您可以通过处理DateChanged事件来禁用日期:
Private Sub MonthCalendar1_DateChanged(sender As System.Object, e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged
Dim day As DateTime
Dim disabledDay As DateTime
Dim defaultDay As DateTime
disabledDay = New DateTime(2015, 1, 8) 'you might actually have a list of days
defaultDay = New DateTime(2015, 1, 1)
day = e.Start
While (day <= e.End)
If day = disabledDay Then 'if you have a list, you need a linq statement or a double loop
MsgBox("Can't select that day")
MonthCalendar1.AddBoldedDate(disabledDay)
MonthCalendar1.UpdateBoldedDates()
MonthCalendar1.SetSelectionRange(defaultDay, defaultDay)
Exit Sub
End If
day = day.AddDays(1)
End While
End Sub发布于 2015-01-08 01:43:35
再次感谢Denise,我修改了您编写的这段代码,以便它可以与数组一起使用
Private Sub MonthCalendar1_DateChanged(sender As System.Object, e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged
Dim day As DateTime
'Dim disabledDay As DateTime
Dim defaultDay As DateTime
Dim disabledDay = {New DateTime(2015, 1, 8), New DateTime(2015, 1, 9)} 'you might actually have a list of days
defaultDay = New DateTime(2015, 1, 1)
day = e.Start
While (day <= e.End)
For Each DisabledDate As Date In disabledDay
If day = DisabledDate Then 'if you have a list, you need a linq statement or a double loop
MsgBox("Can't select that day")
MonthCalendar1.AddBoldedDate(DisabledDate)
MonthCalendar1.UpdateBoldedDates()
MonthCalendar1.SetSelectionRange(defaultDay, defaultDay)
Exit Sub
End If
Next
day = day.AddDays(1)
End While
End Sub我不熟悉"e“这个词,但我会记录自己。
https://stackoverflow.com/questions/27822841
复制相似问题