C# WinForms 如何在 TreeView 中停止 Ding 声音

本文关键字:Ding 声音 TreeView WinForms | 更新日期: 2023-09-27 18:32:22

如果您在 TreeView 的

keydown 事件中打开任何模式对话框(或者,如果焦点在 TreeView 上,则在 KeyPreview=true 的窗体中),您将听到烦人的 DING!

如何防止它发生?

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

C# WinForms 如何在 TreeView 中停止 Ding 声音

本机

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

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

使用 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 以指示击键已被窗体占用并停止进一步处理。

万一它帮助了某人...

我在

使用树视图时遇到了同样的问题,除了我在将 KeyPreview 设置为 true 的情况下处理表单中的事件。

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