我已经在我的Windows窗体项目上工作了一段时间,我决定try 使用键盘快捷键.读了一会儿之后,我想我只需要编写一个事件处理程序并将其绑定到窗体的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);
// ...
}
因此,我try 向处理程序添加一个Console.WriteLine()
调用,以判断它是否被调用,但也没有成功.
此外,我try 在事件绑定调用(如上图所示)上设置一个断点,发现程序刚好到达该断点.但是,我在方法定义本身中设置的任何断点都不会到达.
为了确保我正确地完成了前几个步骤,我试着用以下方法重复它们:
A new form in the same solution.
Same issue: the form doesn't respond when I press my Ctrl+Alt+O keyboard shortcut and the debugger isn't even stepping into the event handler.Tried this again and it works.A brand new WinForms solution.
它工作得很好:出现消息对话框(Console.WriteLine()
呼叫也可以工作).
所以我在这里完全迷路了.是什么阻止了这个项目中的所有窗体接收KeyDown事件?