DateTimePicker ValueChanged事件以月箭头重复

时间:2011-03-28 12:31:36

标签: c#

在我的DateTimePicker上单击向前或向后箭头时 控制它重复触发ValueChanged事件。我必须使用 调试器停止应用程序。

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

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

3 个答案:

答案 0 :(得分:13)

我不清楚你想要实现什么,但我的猜测是你希望例如展示一个消息框或类似的东西。如果是这样,那么没有恐惧,因为你正面临着我前段时间想到的同样问题。 不使用 ValueChanged -event,而是使用 CloseUp -event。 CloseUp -event仅在用户最终选择一个值。希望这是你想要的。如果想要更新例如在UI中向用户显示的一些计算,您将使用 ValueChanged -event。

答案 1 :(得分:4)

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 :(得分:1)

当您单击日期时间选择器的向下箭头时,它会显示默认日期。当您单击日期时间选择器中的任何日期时,它将触发datetimepicker1_valuechanged事件。无论你为活动设置了什么骨架,都可以正常工作。 Unnikrishnan C