在C#中和键盘相关的事件相对比较少,大致三种:"KeyDown"、"KeyUp"和"KeyPress"。
这三个事件是有事件顺序的。
KeyDown --> KeyPress --> KeyUp
分别代表键盘按下,键盘按住,键盘抬起。
(1)如何在C#程序中定义这些事件
C#中描述"KeyDown"、"KeyUp"的事件的Delegate 是"KeyEventHandler",数据的类是"KeyEventArgs"。而描述"KeyPress"所用的 Delegate是"KeyPressEventHandler",数据的类是"KeyPressEventArgs"。这二个Delegate都被封装在命名空间“System.Windows.Forms"中。
在C#程序定义"KeyDown"、"KeyUp"事件的语法如下:"组件名称"."事件名称"+= new Syetem.Windows.Froms.KeyEventHandler("事件名称");具体实现代码:button1. KeyUp += new Syetem.Windows.Froms. KeyEventHandler(button1_KUp);
下面是响应上面事件的基本结构。
private void button1_KUp ( object sender , Syetem.Windows.Froms. KeyEventArgs e ) { //此处加入响应此事件的代码 }
在C#程序定义"KeyPress"事件的语法如下:"组件名称"."事件名称"+= new Syetem.Windows.Froms. KeyPressEventHandler("事件名称");具体实现代码:button1. KeyPress += new Syetem.Windows.Froms. KeyPressEventArgs(button1_KPress);
在完成了事件的定义以后,要在程序中加入响应此事件的代码,否则程序编译的时候会报错。下面是响应上面事件的基本结构。
private void button1_KPress ( object sender , Syetem.Windows.Froms. KeyPressEventArgs e ) { //此处加入响应此事件的代码 }
注释:程序中出现的"button1"是定义的一个按钮组件。
(2)假如窗体Form中已经有控件,而又想响应窗体Form的键盘响应事件
如Form1_KeyPress事件,此时你会发现,当前当你按下按键的时候,Form1_KeyPress事件并没有得到响应,为什么呢?因为KeyPress事件是在控件获得焦点的时侯,按下按键才能得到响应的,当窗体中有控件时,窗体是不会获得焦点的,除非窗体中没有控件,此时窗体是当前获得焦点,可以响应响应的键盘事件。
当窗体中有控件时,如何解决窗体键盘响应事件呢?方法很简单,只需把Form1 的KeyPreview属性设为true即可。KeyPreview属性是指:确定窗体上控件的键盘事件是否已向窗体注册。
(3) 举例说明:
private void FrmMain_Load(object sender, EventArgs e) { this.KeyPreview = true;//获取或设置一个值,该值指示在将键事件传递到具有焦点的控件前,窗体是否将接收此键事件。 } private void FrmMain_KeyUp(object sender, KeyEventArgs e) { if (Keys.F1 == e.KeyCode) { //MessageBox.Show("您所按动的键是:" + e.KeyCode.ToString()); Help.ShowHelp(this,@"C:UsersHongYeDesktopRevitAPI.chm"); } }