C#-Windows窗体中的按键事件问题

C#-Windows窗体中的按键事件问题,c#,winforms,event-handling,keydown,C#,Winforms,Event Handling,Keydown,加载主窗体时,我将尝试设置一个键事件处理程序,如下所示: private void FormMain_Load(object sender, EventArgs e) { KeyDown += FormMain_KeyDown; } 以及调用的函数: private void FormMain_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { // Do so

加载主窗体时,我将尝试设置一个键事件处理程序,如下所示:

private void FormMain_Load(object sender, EventArgs e)
{
    KeyDown += FormMain_KeyDown;
}
以及调用的函数:

private void FormMain_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Escape)
    {
        // Do something.
    }
}

问题在于表单对转义(或我尝试过的任何其他键)没有反应。有趣的是,同一个项目的不同表单使用相似的代码,没有任何问题。谁能告诉我我做错了什么吗?

表单上有一个名为KeyPreview的属性,您需要将其设置为true。
然后在按键时,您的处理程序将启动,然后控件上具有焦点的任何处理程序都将启动

表单上有一个名为KeyPreview的属性,您需要将其设置为true。
然后在按键时,您的处理程序将启动,然后控件上具有焦点的任何处理程序都将启动

谢谢你的回答(我会在3分钟内将其设置为已接受)!是否有任何原因使我不必在另一个窗体上将此属性设置为true?您确定不是吗?(或者在某个地方设置ihn代码)我自己从来都不是这个把戏的忠实粉丝,我宁愿在按键时捕捉windows消息。这些年来,我从中得到了不同的结果,对我来说太脆弱了。除了这次,我没有在我的项目中使用KeyPreview。这就是为什么我想知道它在项目中适用于不同的形式,但不适用于主形式。我有兴趣了解更多关于你提到的另一种方法。你能提供一些参考资料给我阅读吗?非常感谢。覆盖WndProc是您正在寻找的。@TonyHopkinson我非常惊讶地在我的一个项目中遇到了同样的情况,我的学生窗体在没有将KeyPreview属性设置为true的情况下成功触发了KeyDown事件,而在我的另一个窗体中,我按照您的建议执行了KeyDown事件谢谢答案(我可以在3分钟内将其设置为已接受)!是否有任何原因使我不必在另一个窗体上将此属性设置为true?您确定不是吗?(或者在某个地方设置ihn代码)我自己从来都不是这个把戏的忠实粉丝,我宁愿在按键时捕捉windows消息。这些年来,我从中得到了不同的结果,对我来说太脆弱了。除了这次,我没有在我的项目中使用KeyPreview。这就是为什么我想知道它在项目中适用于不同的形式,但不适用于主形式。我有兴趣了解更多关于你提到的另一种方法。你能提供一些参考资料给我阅读吗?非常感谢。覆盖WndProc是您想要的。@TonyHopkinson我非常惊讶地在我的一个项目中遇到了同样的情况,我的学生表单在没有将KeyPreview属性设置为true的情况下成功触发了KeyDown事件,而在我的另一个表单中,我按照您的建议执行了KeyDown事件