2012-07-11 6 views
0

내가 이전/다음 달을 클릭하여 2010 년MonthCalendar를 BoldedDates은

변경 개월 비주얼 스튜디오에서 C-샤프에서 MonthCalendar 컨트롤의 DateChanged 이벤트 내에서 굵은 날짜 오전 경고음이 발생 DateChanged 이벤트와 함께 경고음이 발생합니다. 그래도 모든 것이 작동합니다.

경고음을 피하거나 스켈치로 처리하는 방법은 무엇입니까?

문제는 매우 간단하게 복제 할 수 있습니다.

  1. 새로운 더미의 WinForm 프로젝트
  2. 추가, 다음 코드 DateChanged의 이벤트 DateChanged 이벤트 내부
  3. 추가 폼에 MonthCalendar를 컨트롤 추가 만들기 :

    DateTime[] dteBolded = { new DateTime(2012, 9, 28, 0, 0, 0), new DateTime(2012, 9, 21, 0, 0, 0) }; 
    
    this.monthCalendar1.RemoveAllBoldedDates(); 
    this.monthCalendar1.BoldedDates = dteBolded; 
    
  4. 실행하고 VS2010 내부에서 재생을 누릅니다.

  5. 이전/다음 달을 클릭하십시오. 삐 소리가 들릴 수 있습니다.

어떻게 문제를 해결할 수 있습니까? 사전에

감사합니다,

사라

답변

2

는 BoldedDates 속성은 특별하다. 네이티브 Windows 컨트롤이 만들어 질 때 지정되는 스타일 플래그 (MCS_DAYSTATE)로 지원됩니다. 코드가 네이티브 컨트롤 창을 강제로 다시 만드는 속성을 변경합니다. 그것을 볼 수있는 확실한 방법이 있습니다. 눈에 띄게 깜박 거릴 것입니다.

입력 이벤트를 가져 오는 컨트롤이기 때문에 경고음이 생성됩니다. 혼란스럽고 삐 소리가납니다.

해결 방법은 입력 처리가 완료되도록 속성 변경을 지연시키는 것입니다. Control.BeginInvoke() 메서드로 우아하게 처리 할 수 ​​있습니다. 이와 같이 :

private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) { 
     this.BeginInvoke(new Action(() => { 
      DateTime[] dteBolded = { new DateTime(2012, 9, 28, 0, 0, 0), new DateTime(2012, 9, 21, 0, 0, 0) }; 

      this.monthCalendar1.RemoveAllBoldedDates(); 
      this.monthCalendar1.BoldedDates = dteBolded; 
     })); 
    } 
+0

응답 해 주셔서 감사합니다. 당신 말이 맞아요. 나는 깜박임을 결코 알아 채지 못했으며, 당신이 문제를 해결하기 위해 한 구성을 구현할 생각은 전혀하지 못했습니다. 깜박임이 아직 있지만, 귀찮은 경고음이 사라졌습니다. 흥미 롭 군. - Sarah –