2015-01-07 40 views
0

我最近需要为一个项目使用MonthCalendar,但它看起来像这个控件是非常有限的,我不能做我想要的东西。所以,如果你能给我一些提示,这将是非常有用的。因此,我想要做的是选择多个日期,然后当我点击一个按钮时,这些日期被保存在一个数组中,并在日历中禁用(或至少,他们的单元格背景变成红色)。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中数组中包含的日期?

感谢您的阅读,对不起我的英语不好,这不是我的母语。

+0

[我如何更改MonthCalendar控件中某些日期的颜色?](http://stackoverflow.com/questions/5048872/how-can-i-change-the-color-of-rtain - date-month-calendar-control) –

+0

不是真的,我只是想找到如何禁用日期,只有当没有其他解决方案,然后我想改变他们的颜色 –

回答

1

本地控件仅支持将日期设置为粗体或不粗体。您需要不同的日历控件以红色突出显示日期。

但是,您可以通过处理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 
+0

谢谢,这个作品,我会有当我完全理解你的代码时适应它,但这是一个好的开始。 –

0

再次感谢丹尼斯,我修改了你写的这一个,因此它可以与阵列中使用的代码

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”的事情,但我会记录下自己。