2011-03-28 2 views
8

내 DateTimePicker 컨트롤에서 달 앞으로 또는 뒤로 화살표를 클릭하면 ValueChanged 이벤트가 반복적으로 발생합니다. 응용 프로그램을 중지하려면 디버거를 사용해야합니다.DateTimePicker ValueChanged 월 화살표로 이벤트가 반복됩니다.

참고 : 날짜 중 하나를 클릭하면 응용 프로그램이 제대로 작동합니다.

MSDN 설명서에는 컨트롤을 만드는 예제가 나와 있습니다. 하지만 은 dateTimePicker1_ValueChanged()라는 예제 함수를 찾을 수 없습니다. 이 함수의 골격 은 나를 위해 만들어졌습니다. 컨트롤을 두 번 클릭하면 VS.NET2008 디자이너가됩니다.

+0

'dateTimePicker1_ValueChanged' 내에 코드를 표시하십시오. –

+0

dateTimePicker1_ValueChanged() – thumbmunkeys

+0

에서 날짜 값을 변경하는 경우 (dtpStart.Value> dtpEnd.Value) {MessageBox.Show ("휴가 날짜 이전에 휴가 종료일이 발생할 수 없습니다", "잘못된 항목", MessageBoxButtons.OK); dtpStart.Value = dtpEnd.Value; } –

답변

3

Dave81 올바른 트랙을 설정하십시오. 그가 말한대로하면 사용자가 직접 값을 변경하면 CloseUp 이벤트가 발생하지 않는다는 것이 문제입니다. 월별 변경 이벤트를 계속 다시 발생시키는 방법으로이 문제를 해결 한 방법은 달력을 삭제하지 않은 경우에만 ValueChanged 이벤트를 새로 고치는 것입니다. 예 :

private bool _calendarDroppedDown = false; 
//called when calendar drops down 
private void dateStartDateTimePicker_DropDown(object sender, EventArgs e) 
{ 
    _calendarDroppedDown = true; 
} 
//called when calendar closes 
private void dateStartDateTimePicker_CloseUp(object sender, EventArgs e) 
{ 
    _calendarDroppedDown = false; 
    RefreshToolbox(null, null); //NOW we want to refresh display 
} 

//This method is called when ValueChanged is fired 
public void RefreshToolbox(object sender, EventArgs e) 
{ 
    if(_calendarDroppedDown) //only refresh the display once user has chosen a date from the calendar, not while they're paging through the days. 
    return; 
    ... 
} 
+2

이 특정 솔루션을 사용하지는 않았지만 datepickers에서 IsDropDownOpen 속성을 찾았습니다. 즉, 이러한 이벤트 처리기를 작성할 필요가 없지만 동일한 작업을 수행 할 수 있습니다. – bio595

12

당신이 달성하려고하는 것이 분명하지 않지만 내 추측으로는 메시지 상자 나 비슷한 것을 보여 주길 바랍니다. 그렇다면 당신이 전에 내가 궁금해했던 것과 똑같은 문제에 직면하고 있기 때문에 두려움이 없다. ValueChanged -event 대신 CloseUp -event를 사용하십시오.CloseUp -event는 사용자가 최종적으로 값을 선택할 때만 트리거됩니다. 희망이 당신이 찾고있는 것입니다. 예를 들어 UI에서 사용자에게 표시된 일부 계산을 업데이트하려면 ValueChanged -event를 사용합니다.

+0

당신의 도움을위한 고 너 –

+0

문제 없습니다. 이게 당신의 문제를 해결 했나요? :) – Dave81

+0

고맙습니다 ...--) –

1

datetimepicker의 아래쪽 화살표를 클릭하면 기본 날짜가 표시됩니다. datetime picker에서 임의의 날짜를 클릭하면 datetimepicker1_valuechanged 이벤트가 발생합니다. 이벤트에 골격을 넣은 것이 무엇이든지간에 잘 작동합니다. Unnikrishnan C