首页 > 解谜 > 神秘事件
x

C#中简单的键盘和鼠标事件处理完整教程

神秘事件 2026-03-14 菜科探索 +
简介:在程序运行中,产生事件的主体有很多,其中尤其以Keyboard和Mouse为最多。

本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。

一.本文介绍的程

【菜科解读】

在程序运行中,产生事件的主体有很多,其中尤其以Keyboard和Mouse为最多。

本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。

一.本文介绍的程序设计和运行的软件环境: (1).Windows xp (2)..net framework 2.0 二.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)和此代码编译后运行界面: 图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#中如何定义和鼠标和键盘相关的事件和在这些事件中一些典型问题的处理办法。

虽然这些知识最为基本,但也最为重要,因为在程序设计中,这些问题和我们打交道的机会最多。

当然和鼠标和键盘相关的事件和问题还有许多,可以参照根据上面. 中,简单,的,键盘,和,鼠标,事件,处理,完整,在,

美军制造伊朗小学惨案!中方伸出援手

在美国以色列对伊朗 发动的军事打击中 伊朗南部一小学遭袭 至少165人遇难 其中大多是10岁左右的小女孩 中国红十字会决定 提供20万美元 紧急人道主义援助 慰问伊朗小学遇难学生家长 中方提供20万美元 慰问伊朗遇难学生家长 3月13日,外交部发言人郭嘉昆在例行记者会上表示,中方对伊朗小学遇难学生表示深切哀悼,向遇难学生家属致以诚挚慰问。

中国红十字会决定向伊朗红新月会提供20万美元紧急人道主义援助,专门用于慰问和抚恤遇难学生家长。

郭嘉昆表示,中方谴责一切无差别袭击平民和非军事目标的行为,袭击学校、伤害儿童更严重违背国际人道法,突破人类道德良知底线。

中方愿继续本着人道主义精神,向伊方提供必要帮助,支持伊朗人民渡过难关。

美将领证实 伊朗小学遭袭是美军所为 2月28日,美以对伊朗发动军事打击,伊朗南部米纳卜市一所女子小学遭到空袭,至少165人遇难,其中大多是10岁左右的小女孩。

3月12日,美军欧洲司令部司令兼北约欧洲盟军最高司令格林克维奇在参议院军事委员会听证会上证实,2月28日伊朗南部一所小学遭袭是美军所为。

他辩称,这次袭击是由“一系列错误和失误”造成的。

近日,来自伊朗与美国多家媒体的照片与视频都证明,是美军发射的导弹造成了这起惨剧。

伊朗遭袭小学现场,导弹残骸上标有“美国制造” 美国参议员吉利布兰德12日说,美国总统特朗普应就伊朗小学遭袭事件作出解释,并要求美国国防部长赫格塞思就此引咎辞职。

欧洲议员: 西方的炸弹从未带来民主 3月11日,欧洲议会议员马克·博滕加在发言中质问在场的议员们:“你们敢面对被导弹炸死的伊朗女孩吗?” 博滕加批评说,欧洲声称“与伊朗人民站在一起”,但美国和以色列攻击伊朗,造成伊朗平民遇难、损毁世界文化遗产甚至引发“毒雨”,欧洲不仅不谴责,甚至支持美国和以色列的行动。

博滕加表示,在阿富汗、利比亚、叙利亚和伊拉克,西方的炸弹从未带来民主,只有混乱、死亡和破坏。

最新国际军情 关注央视军事 来源:央视军事综合CMG国际时讯 海量资讯、精准解读,尽在新浪财经APP

中国红十字会捐助伊朗遇难学生家长

中国红十字会捐助伊朗遇难学生家长 【#中国红十字会捐助伊朗遇难学生家长#】3月13日,外交部发言人郭嘉昆主持例行记者会。

有记者提问,2月28日以来,美国和以色列对伊朗实施军事打击。

有媒体报道称,伊朗霍尔木兹甘省沙贾雷·塔耶贝小学遭袭,导致160余名女童在空袭中丧生。

中方是否考虑就此向伊方提供人道主义援助?郭嘉昆表示,中方谴责一切无差别袭击平民和非军事目标的行为,袭击学校、伤害儿童更严重违背国际人道法,突破人类道德良知底线。

“我们对伊朗霍尔木兹甘省沙贾雷·塔耶贝小学遇难学生表示深切哀悼,向遇难学生家属致以诚挚慰问。

”郭嘉昆说,中国红十字会决定向伊朗红新月会提供20万美元紧急人道主义援助,专门用于慰问和抚恤遇难学生家长。

中方愿继续本着人道主义精神向伊方提供必要帮助,支持伊朗人民渡过难关。

(人民日报)

C#中简单的键盘和鼠标事件处理完整教程

点击下载文档

格式为doc格式