當前位置:編程學習大全網 - 編程語言 - java KeyEventHandler

java KeyEventHandler

EventHandler是壹個委托語句。

公共委托void EventHandler(對象發送方,EventArgs e)

註意這裏的參數。前者是壹個對象(其實這裏傳遞的是對象引用,如果是button1的點擊事件,發送方就是button1),後面是包含事件數據的類的基類。

我們來研究壹下Button類看看事件聲明(使用WinCV工具),以Click事件為例。

公共事件EventHandler Click

這裏定義了EventHandler Click類型的事件。

前面的內容已經由C#在類庫中為我們定義好了。讓我們看看編程時生成的代碼。

私有void button1_Click(對象發送方,系統。EventArgs e)

{

...

}

這是我們對應button1_click事件的方法。請註意,該方法的參數與委托中的簽名(即參數列表)相匹配。那我們怎麽把這個方法和事件聯系起來呢?請看下面的代碼。

this.button1。單擊=新系統。EventHandler(this . button 1 _ Click);

將this.button1_Click方法綁定到this.button1。單擊事件。字符串8

我們來研究壹下C#事件處理的工作流程。首先系統會創建壹個對象讓我們在後臺監聽事件(如果是button1的事件,就是button1)。這個對象用來生成事件,如果有用戶事件發生,就會生成相應的應用程序事件,然後執行所有訂閱事件的方法。

第二,壹個簡單的自定義事件(1)

首先,我們需要定義壹個類來監聽客戶端事件,這裏我們監聽鍵盤輸入。

定義委托。

公共委托void UserRequest(對象發送方,EventArgs e);

前壹個對象用來傳達事件的生成器,後壹個EventArgs用來傳達事件的細節,暫時沒用,後面的例子會用到。

下面定義了這種委托類型的事件。

公共事件UserRequest OnUserRequest

讓我們做壹個無限循環。

public void Run(){ bool finished = false;do { if(控制臺。ReadLine()= = " h "){ OnUserRequest(this,new EventArgs());} }while(!完了);}

這段代碼不斷要求用戶輸入字符。如果輸入結果為H,將觸發OnUserRequest事件。事件的觸發器是自身(this),事件細節不可用(沒有EventArgs實例傳遞任何參數)。我們將這個類命名為UserInputMonitor。

我們需要做的是定義客戶端的類字符串5。

您必須首先實例化UserInputMonitor類。

UserInputMonitor monitor = new UserInputMonitor();

然後我們定義壹個方法。

私有void ShowMessage(對象發送方,EventArgs e)

{

控制臺。WriteLine(“哈哈!!");

}

最後要做的是將這個方法與事件關聯起來(訂閱事件),我們將把它寫入庫客戶端類的構造函數中。

客戶端(用戶輸入監視器m)

{

米(meter的縮寫))OnUserRequest = new UserInputMonitor。UserRequest(this。show message);

//m . OnUserRequest = new m . user request(this。show message);

//註意,這種寫法是錯誤的,因為委托是靜態的。

}

讓我們創建壹個客戶機實例。

新客戶端(監視器);

順便說壹下,不要忘記讓monitor開始監聽事件。

monitor.run()。

妳完了。代碼如下:

使用系統;class user input monitor { public delegate void user request(對象發送方,EventArgs e);//定義委托公共事件用戶請求onuserrequest//此委托類型的事件public void run(){ bool finished = false;do { if(控制臺。ReadLine()= = " h "){ OnUserRequest(this,new EventArgs());} }while(!完了);}}

public class Client { public static void Main(){ user input monitor monitor = new user input monitor();新客戶端(監視器);監視器。run();} private void ShowMessage(對象發送方,EventArgs e) { Console。WriteLine(“哈哈!!");} Client(UserInputMonitor m){ m . OnUserRequest = new UserInputMonitor。UserRequest(this。show message);//m . OnUserRequest = new m . user request(this。show message);//註意這種寫法是錯誤的,因為委托是靜態的}} String 3

第三,進壹步研究C#中預定義的事件處理機制

也許妳發現C#中的壹些事件看起來和之前的不壹樣。例如

private void textbox 1 _ KeyPress(對象發送方,系統。windows . forms . keypress eventargs e)

{

}

this.textBox1。按鍵=新系統。windows . forms . KeyPress eventhandler(this . textbox 1 _ KeyPress);

這裏使用KeyPressEventArgs作為參數,而不是EventArgs。這裏使用的是KeyEventHandler委托,而不是EventHandler委托。

KeyPressEventArgs是EventArgs的派生,KeyEventHandler的語句如下

公共委托void KeyEventHandler(對象發送方,key eventargs e);

是具有參數KeyEventArgs的委托。那為什麽按鍵事件會這樣呢?我們可以從兩個類的構造函數中找到答案。

公共EventArgs();

public keypress eventargs(char key char);

這裏的關鍵數據是什麽?用來傳達我們按了哪個鍵,哈。

我在KeyEventArgs中發現了另壹個屬性。

public char KeyChar { get}

這進壹步證明了我的理論。我們舉壹個類似的例子來幫助理解。

四、簡單的自定義事件(2)

以我們上面做的例子來改變它。

我們還定義了壹個名為MyEventArgs的EventArgs(類似於KeyEventArgs),定義了壹個名為public MyEventArgs(char keyChar)的構造函數,我們還設置了相應的屬性。代碼如下:字符串3

使用系統;class public MyMyEventArgs(char key char){ this . key char = key char;} public char key char { get { return key char;} }}

因為我們現在必須聽多個鍵,所以我們必須重寫do...同時也是聽眾的壹部分。重寫委托並重寫客戶端傳遞的參數。好了,最後代碼如下,好累。

使用系統;class public my eventargs(char key char){ this . key char = key char;} public char key char { get { return key char;} }}

class UserInputMonitor { public delegate void user request(對象發送方,my eventargs e);//定義委托公共事件用戶請求onuserrequest//此委托類型的事件public void run(){ bool finished = false;do { string inputString= Console。ReadLine();if (inputString!="") OnUserRequest(this,new my eventargs(input string[0]));}while(!完了);}}

public class Client { public static void Main(){ user input monitor monitor = new user input monitor();新客戶端(監視器);監視器。run();} private void show message(對象發送方,我的eventargs e) {console。writeline ("captured: {0} ",e . key char);} Client(UserInputMonitor m){ m . OnUserRequest = new UserInputMonitor。UserRequest(this。show message);//m . OnUserRequest = new m . user request(this。show message);//註意這種寫法是錯誤的,因為委托是靜態的}}

  • 上一篇:模擬江湖門派發展攻略
  • 下一篇:編程語言有多少種?
  • copyright 2024編程學習大全網