繁体   English   中英

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

[英]C# WinForms how to stop Ding sound in TreeView

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

我该如何防止它发生?

这个ding通常是一个没有处理键事件的信号(比如,默认情况下TextBox会为Ctrl + A等)。 但是,设置e.Handled或e.SuppressKeyPress对于TreeView中的模式对话框没有帮助。 除了打开模态对话框之外,它在执行任何操作时都有帮助!

当您在其中一个事件中抽取消息循环时,本机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表示按键被表单占用并停止进一步处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM