问题描述
- C# Winfrom项目,如何实现Panel控件响应键盘事件
-
在C# Winfrom 项目中,有一个from窗体和一个Panel控件。
目前from窗体和Panel控件都是全屏显示。并且在Panel控件内用于加载显示外部应用程序。目前遇到一个问题就是按下键盘的“Esc”键,无法响应键盘的事件。
无法实现按下键盘的“Esc”键后就立即退出整个程序。请问怎么样解决下用户按下键盘的“Esc”键后无法响应键盘的事件?
解决方案
使用下面的代码试试看
//来源: http://www.cnblogs.com/zhwl/archive/2013/06/06/3121515.html
//重写ProcessCmdKey的方法
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
int WM_KEYDOWN = 256;
int WM_SYSKEYDOWN = 260;
if (msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN)
{
switch (keyData)
{
case Keys.Escape:
this.Close();//esc关闭窗体
break;
}
}
return false;
}
解决方案二:
这可能是因为你的键盘事件放在load里面或者其它只执行一次的函数里面。
你可以设置一个timer,设置enabled=true,interval=500,然后点击timer控件,在事件里面用if语句判断是否按下ESC键。这样你在任何时候按下ESC,程序都可以响应。