C#處理滑鼠和鍵盤事件

來源:互聯網
上載者:User
在程式運行中,產生事件的主體有很多,其中尤其以鍵盤和滑鼠為最多。本文就來探討一下在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 ( ) , "您所按動的健為:" ) ;

}
}



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.