0

我在 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里面按play。

  6. 单击上/下个月。您可以听到哔声。

我该如何解决这个问题?

提前致谢,

莎拉

4

1 回答 1

2

加粗日期属性是特殊的。使用创建本机 Windows 控件时指定的样式标志 (MCS_DAYSTATE) 打开对它的支持。您的代码更改了强制重新创建本机控制窗口的属性。有一种明显的方法可以看到它,你会看到它非常明显地闪烁。

发出哔声是因为它现在是获取输入事件的新控件。它感到困惑并发出哔哔声。

解决方法是延迟更改属性,以便完成输入处理。您可以使用 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;
        }));
    }
于 2012-07-11T17:56:43.383 回答