如果你在TreeView的keydown事件中打开任何模态对话框(或者如果焦点在TreeView上,则在KeyPreview = true的表格中),你会听到烦人的DING!
我如何防止它发生?
这个ding通常是一个没有处理关键事件的信号(比如,默认情况下TextBox会为Ctrl + A等)。但是,设置e.Handled或e.SuppressKeyPress对于TreeView中的模式对话框没有帮助。除了打开模态对话框之外,它在执行任何操作时都有帮助!
答案 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表示按键被表单占用并停止进一步处理。