欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深入分析C#中处理和键盘相关事件的详解

程序员文章站 2023-12-20 22:33:58
在c#中和键盘相关的事件相对比较少,大致就三种:"keydown"、"keyup"和"keypress"。(1).如何在c#程序中定义这些事件:c#中描述"keydown"...
在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的代码如下:
复制代码 代码如下:

代码
 using system ;
  using system.drawing ;
  using system.collections ;
  using system.componentmodel ;
  using system.windows.forms ;
  using system.data ;
  public class form1 : form
 {
 private system.componentmodel.container components = null ;

 public form1 ( )
 {
 file://初始化窗体中的各个组件
 initializecomponent ( ) ;
 }
 protected override void dispose ( bool disposing )
 {
 file://清除程序中使用过的资源
 if ( disposing )
 {
 if ( components != null )
 {
 components.dispose ( ) ;
 }
 }
 base.dispose ( disposing ) ;
 }
 private void initializecomponent ( )
 {
 this.autoscalebasesize = new system.drawing.size ( 6 , 14 ) ;
 this.clientsize = new system.drawing.size ( 292 , 273 ) ;
 this.name = "form1" ;
 this.text = "c#处理键盘事件!" ;
 file://为按键的按动定义一个事件处理过程"form1_keyup"
 this.keyup += new keyeventhandler ( this.form1_keyup ) ;

 }
 static void main ( )
 {
 application.run ( new form1 ( ) ) ;
 }
 file://显示你所按动的按键名称
 private void form1_keyup ( object sender , keyeventargs e )
 {
 messagebox.show ( e.keycode.tostring ( ) , "您所按动的健为:" ) ;

 }
 }

 上面都是网上找的,我看了之后,自己试了很多次,按键没反应......
 后来才在书上找到,原来 要先把对应的form 的keypreview属性设为true
 c# codethis.keypreview=true;this.keydown+=newkeyeventhandler(frmnewbook_keydown);

         }voidfrmnewbook_keydown(objectsender, keyeventargs e)
         {switch(e.keydata)
             {casekeys.f4:
                     console.writeline("楼主给点分吧");break;//.........}
         }

上一篇:

下一篇: