在MonthCalendar中更改月份会触发两次DateChanged事件

时间:2011-12-22 16:07:40

标签: c# winforms monthcalendar

Heyo,

我的应用程序中有一个标准的WinForms MonthCalendar,其中一个处理程序连接到DateChanged事件。每当我按日更改日期时,点击小日历中的某个日期,事件就会触发一次。但是,每当我按月更改日期时,请单击<和>在控件中,事件触发两次。我希望在所有情况下都能触发一次事件。

有什么想法吗?

编辑:我调试并发现第一个和第二个处理程序调用的SelectedItem或Range是相同的。因此,我需要一种方法来区分第一次和第二次呼叫,同时在事件仅触发一次时仍允许正确处理。

请求处理程序代码,就在这里,但它与多次触发事件无关:

List<TimestampInfo> displayTimestamps = databaseManger.QueryForTimestamps(DayPicker.SelectionRange);
if (displayTimestamps == null) return;
TimestampsListBox.Items.Clear();
TimestampsListBox.Items.AddRange(displayTimestamps.ToArray());

3 个答案:

答案 0 :(得分:1)

有些黑客,但将SelectionRange字符串值与上一个DataChanged事件进行比较。如果代码不同,只需运行代码:

private string _LastRange = string.Empty;

private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) {
  if (monthCalendar1.SelectionRange.ToString() != _LastRange) {
    _LastRange = monthCalendar1.SelectionRange.ToString();

    List<TimestampInfo> displayTimestamps = databaseManger.QueryForTimestamps(DayPicker.SelectionRange);
    if (displayTimestamps == null) return;
    TimestampsListBox.Items.Clear();
    TimestampsListBox.Items.AddRange(displayTimestamps.ToArray());
  }
}

答案 1 :(得分:0)

在我连接事件处理程序两次之前,我无法重现这一点。

monthCalendar1.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateChanged);
monthCalendar1.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateChanged);

您是否使用事件处理程序进行代码修改?

答案 2 :(得分:0)

试试这个:

private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) {
      Calendar1.SelectedDate = Calendar1.VisibleDate;
      //  any additional code optional
}