分享
 
 
 

[转载]C#处理鼠标和键盘事件

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在程序运行中,产生事件的主体有很多,其中尤其以键盘和鼠标为最多。本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。

一.本文介绍的程序设计和运行的软件环境:

(1).微软公司视窗2000服务器版

(2)..Net FrameWork SDK Beta 2

二.C#中处理鼠标相关的事件:

鼠标相关的事件大致有六种,分别是 :

"MouseHover"、"MouseLeave"、"MouseEnter"、"MouseMove"、"MouseDown"和"MouseUp"。

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

在C#中是通过不同的Delegate来描述上述事件,其中描述"MouseHover"、"MouseLeave"、"MouseEnter"事件的Delegate是"EventHandler",而描述后面的三个事件的Delegate是"MouseEventHandler"来描述。这二个Delegate分别被封装在不同的命名空间,其中"EventHandler"被封装在"System"命名空间;"MouseEventHandler"被封装在"Syetem.Windows.Froms"命名空间中的。在为"MouseHover"、"MouseLeave"、"MouseEnter"事件通过数据的类是"EventArgs",他也被封装在"System"命名空间中;而为后面的三个事件提供数据的类是"MouseEventArgs",他却被封装在"Syetem.Windows.Froms"命名空间。以上这些就决定了在C#中定义这些事件和响应这些事件有着不同的处理办法。下面就来介绍这些不同点。

对于上述的前三个事件,是用以下语法来定义的:

"组件名称"."事件名称"+= new System.EventHandler("事件名称");

下面是程序中具体实现代码:

button1.MouseLeave += new Syetem.EvenHandler(button1_MLeave);

在完成了事件的定义以后,就要在程序中加入响应此事件的代码,否则程序编译的时候会报错。下面是响应上面事件的基本结构。

private void button1_MLeave ( object sender , System.EventArgs e )

{

此处加入响应此事件的代码

}

定义"MouseMove"、"MouseDown"和"MouseUp"事件的语法和前面介绍的三个事件大致相同,具体如下:

"组件名称"."事件名称"+= new System.Windows.Forms. MouseEventHandler("事件名称");

下面是程序中具体实现代码:

button1.MouseMove += new System.Windows.Forms.MouseEventHandler(button1_MMove);

下面是响应上面事件的基本结构:

private void button1_MMove ( object sender , System.Windows.Forms. MouseEventArgs e )

{

此处加入响应此事件的代码

}

注释:在上述程序中的"button1"是定义的一个按钮组件。

2).鼠标相关事件中的典型问题处理办法:

在掌握了C#中定义和鼠标相关的事件,我们就来探讨一下和鼠标相关事件的典型问题。其一是读取鼠标的当前位置;其二是判定到底是那个鼠标按键按动。

判定鼠标的位置可以通过事件"MouseMove"来处理,在"MouseEventArgs"类中提供了二个属性"X"和"Y",来判定当前鼠标纵坐标和横坐标。而判定鼠标按键的按动情况,可以通过事件"MouseDown"来处理,并且在"MouseEventArgs"类中也提供了一个属性"Button"来判定鼠标按键情况。根据这些知识,可以得到用C#编写的读取鼠标当前位置和判定鼠标按键情况的程序代码。下面就是此代码(mouse.cs)和此代码编译后运行界面:

mouse.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 ( ) ;

}

file://清除程序中使用过的资源

protected override void Dispose ( bool disposing )

{

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_MouseDown"

this.MouseDown += new MouseEventHandler ( Form1_MouseDown ) ;

file://为鼠标移动定义一个事件处理过程"Form1_MouseMove"

this.MouseMove += new MouseEventHandler ( Form1_OnMouseMove ) ;

}

static void Main ( )

{

Application.Run ( new Form1 ( ) ) ;

}

private void Form1_OnMouseMove ( object sender , MouseEventArgs e )

{

this.Text = "当前鼠标的位置为:( " + e.X + " , " + e.Y + ")" ;

}

private void Form1_MouseDown ( object sender , MouseEventArgs e )

{

file://响应鼠标的不同按键

if ( e.Button == MouseButtons.Left )

{

MessageBox.Show ( "按动鼠标左键!" ) ;

}

if ( e.Button == MouseButtons.Middle )

{

MessageBox.Show ( "按动鼠标中键!") ;

}

if ( e.Button == MouseButtons.Right )

{

MessageBox.Show ( "按动鼠标右键!") ;

}

}

}

三.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的代码如下:

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 ( ) , "您所按动的健为:" ) ;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有