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

时间:2012-04-26 06:11:51

标签: c# winforms treeview keydown

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

我如何防止它发生?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

使用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表示按键被表单占用并停止进一步处理。