国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#處理鼠標和鍵盤事件

2024-07-21 02:18:19
字體:
來源:轉載
供稿:網友

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

}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青川县| 阳朔县| 连平县| 珲春市| 历史| 大同县| 印江| 张家港市| 敖汉旗| 江陵县| 蓝田县| 永德县| 板桥市| 长宁区| 怀远县| 黑山县| 崇左市| 祁门县| 北宁市| 长顺县| 武穴市| 休宁县| 新泰市| 基隆市| 遂溪县| 乌兰浩特市| 凌源市| 平乡县| 阳谷县| 普宁市| 普兰县| 元江| 右玉县| 滦平县| 肇庆市| 苏尼特左旗| 额济纳旗| 邵东县| 昌黎县| 淮滨县| 巫溪县|