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());
答案 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
}