吴佳鑫的个人专栏

当日事当日毕,没有任何借口

导航

C#中处理和键盘相关的事件

在C#中和键盘相关的事件相对比较少,大致就三种:"KeyDown"、"KeyUp"和"KeyPress"。

(1).如何在C#程序中定义这些事件:

C#中描述"KeyDown"、"KeyUp"的事件的Delegate是"KeyEventHandler"。而描述"KeyPress"所用的 Delegate是"KeyPressEventHandler"。这二个Delegate都被封装在命名空 间"Syetem.Windows.Froms"中。为"KeyDown"、"KeyUp"的事件提供数据的类是"KeyEventArgs"。而 为"KeyPress"事件提供数据的类是"KeyPressEventArgs"。同样这二者也被封装在命名空 间"Syetem.Windows.Froms"中。

在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).和键盘相关事件中的典型问题处理办法:

和键盘相关的典型问题无非就是判定到底是哪个按键被按动。通过上面的三个事件都可以完成。并且在"KeyEventArgs"类中通过了一个属 性"KeyCode",可以用他来读取当前按键。所以就在"KeyUp"或者"KeyDown"事件中处理这个问题。根据上面这些知识,可以得到用C#编 写读取读取按键的程序代码,下面就是此代码(key.cs)和此代码运行后的界面: 

图02:用C#读取键盘按键的程序运行界面

key.cs的代码如下:

 

 

代码
1 using System ;
2  using System.Drawing ;
3  using System.Collections ;
4  using System.ComponentModel ;
5  using System.Windows.Forms ;
6  using System.Data ;
7  public class Form1 : Form
8 {
9 private System.ComponentModel.Container components = null ;
10
11 public Form1 ( )
12 {
13 file://初始化窗体中的各个组件
14 InitializeComponent ( ) ;
15 }
16 protected override void Dispose ( bool disposing )
17 {
18 file://清除程序中使用过的资源
19 if ( disposing )
20 {
21 if ( components != null )
22 {
23 components.Dispose ( ) ;
24 }
25 }
26 base.Dispose ( disposing ) ;
27 }
28 private void InitializeComponent ( )
29 {
30 this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;
31 this.ClientSize = new System.Drawing.Size ( 292 , 273 ) ;
32 this.Name = "Form1" ;
33 this.Text = "C#处理键盘事件!" ;
34 file://为按键的按动定义一个事件处理过程"Form1_KeyUp"
35 this.KeyUp += new KeyEventHandler ( this.Form1_KeyUp ) ;
36
37 }
38 static void Main ( )
39 {
40 Application.Run ( new Form1 ( ) ) ;
41 }
42 file://显示你所按动的按键名称
43 private void Form1_KeyUp ( object sender , KeyEventArgs e )
44 {
45 MessageBox.Show ( e.KeyCode.ToString ( ) , "您所按动的健为:" ) ;
46
47 }
48 }
49
50
51 上面都是网上找的,我看了之后,自己试了很多次,按键没反应......
52 后来才在CSDN上找到,原来 要先把对应的form 的KeyPreview属性设为true
53 晕..........................
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 C# codethis.KeyPreview=true;this.KeyDown+=newKeyEventHandler(frmNewBook_KeyDown);
74
75 }voidfrmNewBook_KeyDown(objectsender, KeyEventArgs e)
76 {switch(e.KeyData)
77 {caseKeys.F4:
78 Console.WriteLine("楼主给点分吧");break;//.........}
79 }
80
81

 

 

 

posted on 2010-01-21 11:51  _eagle  阅读(1297)  评论(0编辑  收藏  举报