我在Visual Studio 2010中的C-Sharp中的MonthCalendar控件的DateChanged事件中加粗日期。
点击上一个/下个月更改月份会发出哔声。但是一切都有效。
如何避免/抑制哔哔声?
这个问题很容易复制。
在DateChanged事件中,添加以下代码:
DateTime[] dteBolded = { new DateTime(2012, 9, 28, 0, 0, 0), new DateTime(2012, 9, 21, 0, 0, 0) };
this.monthCalendar1.RemoveAllBoldedDates();
this.monthCalendar1.BoldedDates = dteBolded;
运行,按VS2010内的播放。
如何解决问题?
提前致谢,
萨拉
答案 0 :(得分:2)
BoldedDates属性很特别。使用在创建本机Windows控件时指定的样式标志(MCS_DAYSTATE)打开对它的支持。您的代码更改了强制重新创建本机控制窗口的属性。有一种明显的方式可以看到它,你会看到它闪烁得非常明显。
产生蜂鸣声是因为它现在是一个获取输入事件的 new 控件。它很混乱并且发出哔哔声。
解决方法是延迟更改属性,以便完成输入处理。您可以优雅地使用Control.BeginInvoke()方法。像这样:
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) {
this.BeginInvoke(new Action(() => {
DateTime[] dteBolded = { new DateTime(2012, 9, 28, 0, 0, 0), new DateTime(2012, 9, 21, 0, 0, 0) };
this.monthCalendar1.RemoveAllBoldedDates();
this.monthCalendar1.BoldedDates = dteBolded;
}));
}