我在Windows窗体项目上工作了一段时间,然后决定尝试使用键盘快捷键。一点阅读后,我算了一下,只写一个事件处理程序,并将其绑定到窗体的KeyDown事件:对KeyDown事件没有响应的表单
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.Alt && e.KeyCode == Keys.O)
{
MessageBox.Show("Ctrl+Alt+O: magic!");
}
}
我这样做,打开Visual Studio设计的属性面板的好醇”的方式,然后双击我的表单的KeyDown事件来生成Form1_KeyDown
事件处理程序。但是在测试我的应用程序时,表单完全没有响应。Ctrl + Alt + O键盘快捷键。 Visual Studio设计确实生成的代码虽然到事件处理程序的窗体绑定:
private void InitializeComponent()
{
// ...
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
// ...
}
于是,我就加入了Console.WriteLine()
调用处理程序,以检查它被称为可言,但没有运气无论是。另外,我尝试在事件绑定调用(如上所示)上设置一个断点,并发现程序到达该断点就好了。但是我在方法定义本身中设置的任何断点永远都不会到达。
为了确保我在做正确的前几个步骤,我试着重复他们:
在同解的新形式。
同一个问题:当我按下Ctrl键+ Alt键+Ø键盘快捷键和调试器甚至没有步入事件处理程序的形式不响应。试了一遍,它的工作原理。一个全新的WinForms解决方案。
它完美地工作:消息对话框出现(Console.WriteLine()
调用也可以)。
所以我很迷茫。什么阻止了这个项目中的所有表单接收KeyDown事件?
不,所以我改变了它,解决了它!感谢您的回答和文档链接。 – BoltClock 2010-07-03 20:28:50
这是一个黑客攻击,可以让VB6程序员快乐。它具有执行顺序问题,而是重写ProcessCmdKey()。 – 2010-07-03 21:31:52
@HansPassant,我找不到任何解释执行顺序问题的东西。 KeyDown + KeyPreview不会看到所有的键,这足以解决问题,但执行顺序问题又是什么? – kdbanman 2015-12-08 23:11:28