吴佳鑫的个人专栏

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

导航

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的源程序代码如下:

 

代码
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 public Form1 ( )
11 {
12 file://初始化窗体中的各个组件
13 InitializeComponent ( ) ;
14 }
15 file://清除程序中使用过的资源
16 protected override void Dispose ( bool disposing )
17 {
18 if ( disposing )
19 {
20 if (components != null)
21 {
22 components.Dispose ( ) ;
23 }
24 }
25 base.Dispose ( disposing ) ;
26 }
27 private void InitializeComponent ( )
28 {
29 this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14) ;
30 this.ClientSize = new System.Drawing.Size ( 292 , 273 ) ;
31 this.Name = "Form1" ;
32 this.Text = "C#处理鼠标按动事件!" ;
33 file://为鼠标按动定义一个事件处理过程"Form1_MouseDown"
34 this.MouseDown += new MouseEventHandler ( Form1_MouseDown ) ;
35 file://为鼠标移动定义一个事件处理过程"Form1_MouseMove"
36 this.MouseMove += new MouseEventHandler ( Form1_OnMouseMove ) ;
37
38 }
39 static void Main ( )
40 {
41 Application.Run ( new Form1 ( ) ) ;
42 }
43 private void Form1_OnMouseMove ( object sender , MouseEventArgs e )
44 {
45 this.Text = "当前鼠标的位置为:( " + e.X + " , " + e.Y + ")" ;
46 }
47
48 private void Form1_MouseDown ( object sender , MouseEventArgs e )
49 {
50 file://响应鼠标的不同按键
51 if ( e.Button == MouseButtons.Left )
52 {
53 MessageBox.Show ( "按动鼠标左键!" ) ;
54 }
55 if ( e.Button == MouseButtons.Middle )
56 {
57 MessageBox.Show ( "按动鼠标中键!") ;
58 }
59 if ( e.Button == MouseButtons.Right )
60 {
61 MessageBox.Show ( "按动鼠标右键!") ;
62 }
63 }
64 }
65

 

posted on 2010-01-19 14:29  _eagle  阅读(11667)  评论(0编辑  收藏  举报