當在我的DateTimePicker上點擊月份前進或後退箭頭時,它會重複觸發ValueChanged事件。我必須使用 調試器來停止應用程序。DateTimePicker ValueChanged事件重複月份箭頭
注意:只要點擊其中一個日期,我的應用程序就可以正常工作。
MSDN文檔顯示了創建控件的示例。但我不能 找到任何示例函數稱爲dateTimePicker1_ValueChanged()。此功能的骨架 是爲我創建的,當我雙擊VS.NET2008設計器中的控件 時。
當在我的DateTimePicker上點擊月份前進或後退箭頭時,它會重複觸發ValueChanged事件。我必須使用 調試器來停止應用程序。DateTimePicker ValueChanged事件重複月份箭頭
注意:只要點擊其中一個日期,我的應用程序就可以正常工作。
MSDN文檔顯示了創建控件的示例。但我不能 找到任何示例函數稱爲dateTimePicker1_ValueChanged()。此功能的骨架 是爲我創建的,當我雙擊VS.NET2008設計器中的控件 時。
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;
...
}
雖然我沒有使用這個特定的解決方案,但卻導致我在datepickers上找到IsDropDownOpen屬性。這意味着你不必編寫這些事件處理程序,但可以完成同樣的事情。 – bio595 2014-02-09 09:43:34
我不清楚你想達到什麼,但我的猜測是你想要例如顯示一個消息框或類似的東西。如果是這樣,那麼不用擔心,因爲你面臨的是我前一段時間想知道的同樣的問題。 而不是使用ValueChanged -event,請使用CloseUp -event。特寫 - 僅當用戶最終選擇一個值時觸發事件。希望這是你正在尋找的。如果想要更新例如在UI中向用戶顯示的一些計算,則可以使用ValueChanged -event。
Thanx爲您提供幫助 – 2011-03-31 06:02:29
沒問題。這是否解決了你的問題? :) – Dave81 2011-03-31 09:19:04
非常感謝你...... :-) – 2014-09-10 07:11:09
當你點擊一個datetimepicker的向下箭頭時,它會顯示一個默認日期。當你點擊日期時間選擇器中的任何日期時,它會觸發datetimepicker1_valuechanged事件。無論您爲事件提供了什麼框架,都可以正常工作。 Unnikrishnan C
請在'dateTimePicker1_ValueChanged'內顯示代碼。 – 2011-03-28 12:34:37
如果(dtpStart.Value> dtpEnd.Value){MessageBox.Show(「離開日期的離開的結束日期不能在離開日期之前發生」,「無效的輸入」,或「無效的輸入」),您是否恰巧更改了dateTimePicker1_ValueChanged() – thumbmunkeys 2011-03-28 12:39:27
中的日期值。 MessageBoxButtons.OK); dtpStart.Value = dtpEnd.Value; } – 2011-03-28 12:40:30