C#中处理鼠标和键盘的事件

摘要:
一个C#处理与鼠标相关的事件:大约有六种类型的鼠标相关事件,即“MouseHouse”、“MouseLeave”、“MouseEnter”、“鼠标移动”、“MooseDown”和“MouseUp”。这些决定了在C#中定义这些事件并对其做出响应的方式不同。根据这一知识,我们可以获得用C#编写的程序代码,以读取鼠标的当前位置,并确定鼠标按钮位置=null){components.Dispose();}}base.Dispose;}PrivatevoidInitializeComponent(){this.AutoScaleBaseSize=newSystem.Drawing.Size;this.ClientSize=newSystem.Drawing.Size;this.Name=“Form1”;this.Text=“C#处理鼠标单击事件!”);}}}}II。在C#中处理与键盘相关的事件:在C#中,与键盘相关事件相对较少,包括“KeyDown”、“KeyUp”和“KeyPress”。
一 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)和此代码编译后运行界面:

C#中处理鼠标和键盘的事件第1张498)this.style.width=498;" border=0>

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

C#中处理鼠标和键盘的事件第2张498)this.style.width=498;" border=0>
图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#中处理鼠标和键盘的事件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何使用Countifs函数动态统计SQL语句之语法汇总(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动

vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动 一、安装服务:private void InstallService(IDictionary stateSaver, string filepath)        {            try            {                Sys...

java枚举类型

public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样....

service之class core和class main

class core 和class main有何不同 在分析Kitkat加密功能的时候,在一些资料上看到一句话“对于加密后的系统,重启后,进入到输入密码界面,此时并没有完全加载Android系统,仅仅加载必要的服务” 那么这个必要的服务又是指的是那些服务呢? 在解答这个问题前我们先区分一下class core ,class main, class late...

System.nanoTime()的使用

纳秒   ns(nanosecond):纳秒, 时间单位。一秒的10亿分之一,即等于10的负9次方秒。常用作 内存读写速度的单位。   1纳秒=0.000001 毫秒   1纳秒=0.00000 0001秒 java的System.currentTimeMillis()和System.nanoTime()区别: java中System.nanoTime()...

redis 在java中的使用

1、首先下载jar包放到你的工程中 2、练习 package com.jianyuan.redisTest; import java.util.Iterator;import java.util.List;import java.util.Set; import redis.clients.jedis.Jedis; public class RedisT...

ORACLE 体系结构

本文内容来自王二暖11G视频讲解 oracle工作原理: 1)、在数据库服务器上启动Oracle实例;2)、应用程序在客户端的用户进程中运行,启用Oracle网络服务驱动器与服务器建立连接;3)、服务器运行Oracle网络服务驱动器,建立专用的服务器进程执行用户进程;4)、客户端提交事务;5)、服务器进程获取sql语句并检查共享池中是否有相似的sql语句...