2015-01-07 6 views
0

최근 프로젝트 용 MonthCalendar를 사용해야했지만이 컨트롤이 실제로 제한되어있어 내가 원하는대로 할 수 없습니다. 그래서 당신이 나에게 몇 가지 조언을 해줄 수 있다면 정말 도움이 될 것입니다.MonthCalendar가 날짜를 사용 중지 할 수 없습니다.

그래서 여러 날짜를 선택한 다음 단추를 클릭하면 배열에 저장되고 일정에서 사용할 수 없게됩니다 (또는 적어도 셀 배경이 빨간색으로 표시됨).

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 

음, 정말 깨끗한 아니지만이 난 그냥이 작품 : 나는 아직 무엇

는 다중 선택을 허용하는 것입니다 (MaxSelectionCount = 31) 내가 선택한 일을 얻기 위해 몇 줄을 썼다 모든 문자열을 날짜로 변환 한 후 배열에 저장합니다.

그래서 내 모든 날짜가 배열에 있다고 가정합니다. 배열에 포함 된 날짜를 내 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

다시 한번 감사 데니스, 나는 그것이 배열을 사용할 수 있도록 당신이이 일에 쓴 코드를 수정

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"일에 익숙하지 않지만, 나는 스스로 문서화 할 것이다.

관련 문제