【发布时间】:2023-03-27 13:50:01
【问题描述】:
我已经在我的 Windows 窗体项目上工作了一段时间,我决定尝试使用键盘快捷键。经过一番阅读,我想我只需要编写一个事件处理程序并将其绑定到表单的 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 事件?
【问题讨论】: