2015-01-07 3 views
0

Мне недавно понадобилось использовать CalendarCalendar для проекта, но похоже, что этот элемент управления действительно ограничен, и я не могу делать то, что хочу с ним. Поэтому, если бы вы могли дать мне несколько советов, это было бы очень полезно.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-certain -dates-in-the-monthcalendar-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

Еще раз спасибо 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 

Я не знаком с «е», но я запишусь сам.

Смежные вопросы