我在Windows Forms项目上工作了一段时间,因此决定尝试键盘快捷键。经过一番阅读之后,我发现我只需要编写一个事件处理程序并将其绑定到表单的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+O键盘快捷键并且调试器甚至没有进入事件处理程序时,表单都没有响应。再试一次,它可以工作。全新的WinForms解决方案。
它工作正常:出现消息对话框(Console.WriteLine()
呼叫也可以)。
所以我在这里很迷路。是什么阻止了这个项目中的所有表单接收KeyDown事件?