深入分析C#中处理和键盘相关事件的详解
程序员文章站
2023-12-18 17:38:34
在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;//.........}
}
(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;//.........}
}