【问题标题】:MonthCalendar BoldedDates causes Beep with DateChanged EventMonthCalendar 粗体日期导致带有 DateChanged 事件的蜂鸣声
【发布时间】:2012-07-11 16:15:43
【问题描述】:

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

通过单击上/下个月更改月份会发出哔声。不过,一切正常。

如何避免 /squelch 发出哔声?

这个问题很容易复制。

  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. 单击上/下个月。您可以听到哔声。

我该如何解决这个问题?

提前致谢,

莎拉

【问题讨论】:

    标签: c# beep monthcalendar


    【解决方案1】:

    BoldedDates 属性很特殊。使用创建本机 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;
            }));
        }
    

    【讨论】:

    • 感谢您的回复。你说的对。我从未注意到闪烁,也从未想过实施您为解决问题所做的构造。闪烁仍然存在,但烦人的哔哔声消失了。有趣的。 - 莎拉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多