首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MonthCalendar无法禁用日期

MonthCalendar无法禁用日期
EN

Stack Overflow用户
提问于 2015-01-07 23:31:38
回答 2查看 1.8K关注 0票数 0

我最近需要在一个项目中使用MonthCalendar,但是这个控件看起来真的很有限,我不能用它做我想做的事情。所以如果你能给我一些建议,那将是非常有帮助的。

因此,我想要做的是选择多个日期,然后当我单击一个按钮时,这些日期将保存在一个数组中,并在日历上禁用(或者至少它们的单元格背景变为红色)。

我已经做的是允许多个选择(MaxSelectionCount = 31),并且我写了几行代码来获得选择的日期:

代码语言:javascript
复制
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中禁用数组中包含的日期呢?

感谢您的阅读,并为我糟糕的英语道歉,这不是我的母语。

EN

回答 2

Stack Overflow用户

发布于 2015-01-07 23:57:40

该控件本身只支持将日期设置为粗体或非粗体。您需要一个不同的日历控件来以红色突出显示日期。

但是,您可以通过处理DateChanged事件来禁用日期:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-01-08 01:43:35

再次感谢Denise,我修改了您编写的这段代码,以便它可以与数组一起使用

代码语言:javascript
复制
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“这个词,但我会记录自己。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27822841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档