`
wjm901215
  • 浏览: 154276 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C#处理鼠标和键盘事件

阅读更多
在程序运行中,产生事件的主体有很多,其中尤其以键盘和鼠标为最多。本文就来探讨一下在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 ( ) , "您所按动的健为:" ) ;

}
}
分享到:
评论

相关推荐

    C#处理鼠标和键盘事件

    C#处理鼠标和键盘事件,主要讲解C#编程中如何利用好鼠标事件和键盘事件

    C#处理鼠标和键盘事件word版

    C#处理鼠标和键盘事件word版,用HTTPWebRequest对象进行请求,用HTTPWebResponse对象接收响应的结果,最后用TextStream对象来提取我们想要的信息,并在控制台打印出来。

    C#鼠标和键盘事件

    ### C#中鼠标和键盘事件处理深度解析 在C#编程世界里,用户输入是程序交互的核心,其中鼠标和键盘事件处理尤为重要。本文将深入探讨C#中如何处理鼠标和键盘事件,包括事件的定义、响应以及一些典型问题的解决策略。...

    C#鼠标钩子和键盘事件

    综上所述,"C#鼠标钩子和键盘事件"的实现涉及对Windows API的深入理解和使用,以及对C#语言特性的熟练掌握。通过创建钩子和处理键盘、鼠标事件,我们可以创建各种实用的工具,如屏幕拾色器、全局快捷键管理器等。但...

    基于C#实现鼠标键盘事件模拟

    首先,C#中的System.Windows.Forms命名空间提供了若干类来处理用户输入事件,如MouseEventArgs和KeyEventArgs,它们分别用于处理鼠标和键盘事件。通过这些事件,我们可以监听用户的鼠标点击、双击和键盘按键行为。...

    C#中鼠标事件键盘事件处理实例代码

    在C#编程中,事件处理是用户界面交互的关键部分,特别是在构建桌面应用程序时。本教程将专注于C#中的鼠标和键盘事件处理,提供...而全局键盘钩子则进一步扩展了我们的能力,允许我们在整个系统级别监听和处理键盘事件。

    c# hook 鼠标键盘事件

    "c# hook 鼠标键盘事件"是指使用C#编程语言来创建一个钩子(hook)程序,这种程序可以监听并处理系统中的鼠标和键盘事件。钩子是Windows API提供的一种机制,允许应用程序设置一个“陷阱”,以便在特定事件发生时...

    C# Hock 全局监听程序外的键盘和鼠标的事件

    "C# Hook 钩子"就是这样一个专题,它允许开发者创建一个全局监听程序,来捕获并处理系统的键盘和鼠标事件。 钩子是一种机制,由Windows操作系统提供,它允许应用程序设置一个或多个“钩子”,以便拦截特定类型的...

    c# winform 鼠标、键盘消息拦截

    总的来说,通过`PreFilterMessage`和Windows钩子机制,我们可以全面地控制C# WinForm应用中的鼠标和键盘事件。但需要注意的是,频繁地拦截和处理这些消息可能会对性能造成一定影响,因此在实际应用中应谨慎使用,并...

    C#模拟鼠标点击 键盘输入

    在IT领域,编程语言C#提供了丰富的功能,其中包括模拟鼠标点击和键盘输入。这在自动化测试、游戏自动化、用户界面自动化以及其他需要程序控制用户交互的场景中非常有用。本篇文章将详细探讨如何在C#中实现这些功能。...

    C# 钩子,实现键盘和鼠标的全部事件全局Hook.(完整源码)

    全局的Hook,可以获取MouseMove,MouseClick,MouseDown Up,DoubClick. 滚轮,Press,键盘的KeyPress,keyDown,KeyUp

    在C#中使用全局鼠标、键盘Hook

    总结来说,要在C#中实现全局鼠标、键盘Hook,我们需要理解Windows API的工作原理,设置和处理钩子回调,以及处理线程同步问题。通过这个过程,我们可以编写出能够监听系统全局输入事件的应用,比如游戏外挂、屏幕...

    C# 键盘鼠标全局钩子(拦截键盘鼠标所有操作)全局HOOK

    C#实现键盘鼠标全局钩子 VS2013,可编译运行,带DEMO 可全局拦截鼠标单击/双击/滚动事件 可全局拦截键盘按键事件 可锁定键盘鼠标输入,比如锁屏! 该代码无法屏蔽Ctrl +alt +delete 需要实现所有拦截,请参考相关...

    C#写的键盘和鼠标记录程序,(记录你点了多少次键盘和鼠标)

    2. **钩子(Hooks)技术**:钩子是Windows系统提供的一种机制,允许程序拦截和处理特定类型的系统事件。在本例中,低级钩子(Low-Level Hooks)能够捕获到系统级别的键盘和鼠标事件。 3. **委托(Delegates)与事件...

    winform键盘和鼠标事件的捕捉与重写(快捷键)

    1. 键盘事件处理: - `KeyDown`事件:当用户按下键盘上的一个键时,此事件会被触发。可以通过检查`EventArgs`对象的`Key`属性来识别按下的具体键。 - `KeyUp`事件:当用户释放键盘上的一个键时,此事件发生。同样...

    C#实现的HOOK鼠标和键盘源码

    标题中的"C#实现的HOOK鼠标和键盘源码"是指一种使用C#编程语言编写的技术,它允许程序拦截和处理系统的鼠标和键盘事件。在Windows操作系统中,这种技术通常被称为全局钩子(Global Hooks),它是通过系统钩子机制来...

    C# 模拟鼠标点击、键盘输入

    在C#中,可以使用`System.Windows.Forms.SendKeys`类来发送键盘事件,而`System.Windows.Forms.MouseButtons`枚举和`System.Drawing.Point`结构则用于模拟鼠标点击。例如,以下代码片段展示了如何模拟左键单击: ``...

Global site tag (gtag.js) - Google Analytics