尝试谷歌搜索,但无法真正找到答案。
拥有一个带有 MonthCalendar 控件和 DateChanged 事件处理的 Windows 窗体。该问题与通过鼠标单击更改月份有关。
我尝试在标签中显示一个计数器值,每次调用事件处理程序时都会对其进行计数。当月份更改时,事件处理程序将被调用 2 次。
当在事件处理中调用 MessageBox.Show("anything") 时,事件处理程序似乎被召回多次并且日历开始永远向后一个月改变。
有人知道为什么吗?
Windows 窗体类中的以下代码会导致所描述的行为:
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
int i = int.Parse(labelDateChanged.Text);
labelDateChanged.Text = (i + 1).ToString();
MessageBox.Show(i.ToString());
}
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
int i = int.Parse(labelDateSelected.Text);
labelDateSelected.Text = (i + 1).ToString();
}
最佳答案
不捕获所有 DateChanged
事件,但解决方案是处理 DateChanged
、KeyUp
和 MouseUp
事件.
DateChanged
事件将 bool 值 IsDateChanged
设置为 true
。 KeyUp
和 MouseUp
事件处理检查是否 IsDateChanged
并执行必要的代码 + 将 IsDateChanged
设置为 false
.
关于c# - MonthCalendar 上的 DateChanged 事件有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564355/