当单击我的DateTimePicker上的月份前进或后退箭头时
控制它反复触发ValueChanged事件。我必须使用
调试器以停止应用程序。

注意:只要单击日期之一,我的应用程序就可以正常工作。

MSDN文档显示了用于创建控件的示例。但是我不能
查找任何名为dateTimePicker1_ValueChanged()的示例函数。骨架
当我双击中的控件时,为我创建了此功能
VS.NET2008设计器。

最佳答案

Dave81使我走上了正确的轨道。
如果您按他说的去做,那么问题是,当用户手动更改值时,显然不会触发CloseUp事件。
我通过不断重新触发月份更改事件来解决此问题的方法是将ValueChanged事件更改为仅在日历未下降的情况下才刷新。 IE。:

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;
  ...
}

09-10 13:26