【问题标题】:C# WinForms how to stop Ding sound in TreeViewC# WinForms 如何在 TreeView 中停止 Ding 声音
【发布时间】:2012-05-06 20:55:33
【问题描述】:

如果您在 TreeView 的 keydown 事件中打开任何模式对话框(如果焦点位于 TreeView 上,则在 KeyPreview=true 的表单中)您会听到烦人的 DING!

如何防止它发生?

此 ding 通常是未处理键事件的信号(例如,默认情况下 TextBox 将 ding 用于 Ctrl+A 等)。但是,设置 e.Handled 或 e.SuppressKeyPress 对 TreeView 中的模态对话框没有帮助。除了打开模式对话框之外,它在做任何事情时都会有所帮助!

【问题讨论】:

  • 无法重现。通过 ShowDialog 显示表单时未播放声音。它为 MessageBox 播放。但那是另一回事了。

标签: c# winforms treeview keydown


【解决方案1】:

当您在其中一个事件中注入消息循环时,本机 Windows 树视图控件会变得非常古怪。标准的解决方案是延迟事件的处理,直到所有事件都完成。使用 Control.BeginInvoke() 方法很容易做到。在这种情况下也工作过:

    private void treeView1_KeyDown(object sender, KeyEventArgs e) {
        e.Handled = e.SuppressKeyPress = true;
        this.BeginInvoke(new Action(() => 
            (new Form1()).ShowDialog()
        ));
    }

【讨论】:

    【解决方案2】:

    使用ProcessCmdKey 捕获击键对我有用。覆盖表单的这个方法:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.O | Keys.Control))
        {
            openFileDialog1.ShowDialog();
            return true;
        }
    
        return base.ProcessCmdKey(ref msg, keyData);
    }
    

    返回 true 表示表单已使用击键并停止进一步处理。

    【讨论】:

    • 这有帮助,但我更喜欢另一个答案,因为它允许我将键盘事件代码保存在一个地方。
    【解决方案3】:

    万一它对某人有帮助......

    我在 TreeView 上遇到了同样的问题,除了我在 KeyPreview 设置为 true 的情况下处理表单中的事件。

    就我而言,我只是忘记设置e.Handled = true;

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多