C#处理鼠标和键盘事件

2016-02-19 16:59 27 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的C#处理鼠标和键盘事件教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

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

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

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

  (2)..Net FrameWork SDK Beta 2

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  "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("事件名称");

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

  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)和此代码编译后运行界面:

  图01:用C#读取鼠标位置和鼠标按键的程序运行界面

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

  四.总结:

  本文介绍了在C#中如何定义和鼠标和键盘相关的事件和在这些事件中一些典型问题的处理办法。虽然这些知识最为基本,但也最为重要,因为在程序设计中,这些问题和我们打交道的机会最多。当然和鼠标和键盘相关的事件和问题还有许多,可以参照根据上面的解决办法加以解决。

来源:http://www.tulaoshi.com/n/20160219/1613802.html

延伸阅读
3.C#中预定义事件处理方式 学习事件,我觉得最不好理解的就是C#中预定义了事件,使我才开始学习事件时一头雾水。在查了些资料后,终于弄明白了一些,如下: EventArgs是包含事件数据的类的基类,用于传递事件的细节。 EventHandler是一个委托声明如下(其在.Net类库中如下声明的) public delegate void EventHandler( object sender , EventArg...
1.委派的实现过程。 首先来看一下委派,委派其实就是方法的传递,并不定义方法的实现。事件其实就是标准化了的委派,为了事件处理过程特制的、稍微专业化一点的组播委派(多点委派)。下面举一个例子,我觉得把委派的例子和事件的例子比较,会比较容易理解。 using System; class Class1 { delegate int MathOp(int i1,int i2); static void ...
标签: autocad教程
用户在AutoCAD系统中工作时,最主要的输入设备是键盘和鼠标,下面介绍如何在AutoCAD中使用键盘和鼠标。 2.1.1 使用键盘 AutoCAD同以前版本一样,同时提供了图形窗口和文字窗口。通常在图形窗口和状态栏之间显示其部分文本窗口和命令行,如图2-1所示。 在AutoCAD系统中为用户提供了许多的命令,用户可以使用键盘在命令行...
在Windows大行其道的今天,windows界面程序受到广大用户的欢迎。对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替手工输入,而用程序来模拟键盘及鼠标的输入呢?答案是肯定的。这主要是通过两个API函数来实现的。 下面以Delphi为例来介绍一下如何实现这两个功...
很多初学c#的朋友对于事件与接口感到迷惑不解,不明白它们之间的关系,下面我就用实例来简单的分析讲解一下。 事件,用event修饰符来代表一个事件,我们要创建一个C#事件必须按以下顺序来扫行: 1,创建或标识一个代表。比如下例中的 public delegate void dele(); //声明代表,delegate 关键字通知编译器 dele 是一个委托类...

经验教程

420

收藏

18
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部