MonthCalendar BoldedDates使用DateChanged事件导致Beep

时间:2012-07-11 16:15:44

标签: c# beep monthcalendar

我在Visual Studio 2010中的C-Sharp中的MonthCalendar控件的DateChanged事件中加粗日期。

点击上一个/下个月更改月份会发出哔声。但是一切都有效。

如何避免/抑制哔哔声?

这个问题很容易复制。

  1. 创建一个新的虚拟WinForm项目
  2. 将MonthCalendar控件添加到表单
  3. 添加DateChanged事件
  4. 在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;
    
  5. 运行,按VS2010内的播放。

  6. 点击上一个/下个月。你可以听到哔哔声。
  7. 如何解决问题?

    提前致谢,

    萨拉

1 个答案:

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