2012-08-08 115 views
0

当主窗体加载时,我试图建立一个关键的事件处理程序如下:C# - 在Windows窗体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 something. 
    } 
} 

问题是表单对Escape(或其他我试过的键)没有反应。有趣的是,与同一个项目不同的表单使用类似的代码没有任何问题。任何人都可以告诉我我做错了什么?

回答

6

表单上有一个名为KeyPreview的属性,您需要将其设置为true。 然后在按键上您的处理程序将会触发,然后控件上的任何处理程序都会关注。

+0

谢谢你的回答(它可以让我在3分钟内接受)!为什么我不需要在另一个表单上将此属性设置为true,是否有任何理由? – IneedHelp 2012-08-08 17:16:33

+0

你确定它不是? (或者在某处设置ihn代码)我自己从来都不是这个伎俩的忠实粉丝,我宁愿将重点新闻的窗口消息陷入其中。多年来我的结果都不尽相同,对我来说太脆弱了。 – 2012-08-08 17:20:47

+0

我的项目中没有使用KeyPreview,除了这一次。这就是为什么我想知道它在项目中以不同的形式工作,而不是主要的形式。我有兴趣了解更多关于您提到的其他方法的信息。你能否提供一些参考资料供我阅读?谢谢! – IneedHelp 2012-08-08 17:27:03