如何使用事件
事件有很多,比如說鼠標的事件:MouserMove,MouserDown等,鍵盤的事件:KeyUp,KeyDown,KeyPress。
有事件,就會有對事件進行處理的方法,而事件和處理方法之間是怎么聯系起來的呢?委托就是他們中間的橋梁,事件發生時,委托會知道,然后將事件傳遞給處理方法,處理方法進行相應處理。
比如在WinForm中最常見的是按鈕的Click事件,它是這樣委托的:this.button1.Click?+=?new?System.EventHandler(this.button1_Click);按按鈕后就會出發button1_Click方法進行處理。EventHandler就是系統類庫里已經聲明的一個委托。
EventHandler以及其它自定義的事件委托都是一類特殊的委托,他們有相同的形式:
delegate?void?事件委托名(object?sender,EventArgs?e);
object用來傳遞事件的發生者,比如二中的Button控件就是一個事件發生者;EventArgs用來傳遞事件的細節。
示例:
?
Codeusing?System;
namespace?EventDemo
{
????///?<summary>
????///?Summary?description?for?Class1.
????///?</summary>
????class?EventReceiver
????{
????????///?<summary>
????????///?The?main?entry?point?for?the?application.
????????///?</summary>
????????[STAThread]
????????static?void?Main(string[]?args)
????????{
????????????EventSender?c1?=?new?EventSender();
????????????//委托實例化后綁定到事件
????????????c1.OnUserRequest?+=?new?UserRequest(c1_OnUserRequest);
????????????c1.Run();
????????}
????????private?static?void?c1_OnUserRequest(object?sender,?EventArgs?e)
????????{//事件處理方法
????????????Console.WriteLine("\t你觸發了事件!");
????????}
????}
????//定義委托
????public?delegate?void?UserRequest(object?sender,EventArgs?e);
????///?<summary>
????///?事件發送類
????///?</summary>
????public?class?EventSender
????{
????????public?EventSender()
????????{
????????}
????????//定義一個委托類型的事件
????????public?event?UserRequest?OnUserRequest;
????????public?void?Run()
????????{
????????????while(true)
????????????{
????????????????if(Console.ReadLine()?==?"a")
????????????????{
????????????????????//事件監聽,產生事件
????????????????????OnUserRequest(this,new?EventArgs());
????????????????}
????????????}
????????}
????}
}
?
帶事件數據的事件示例:
?
using?System;
namespace?EventDemo
{
????///?<summary>
????///?Summary?description?for?Class1.
????///?</summary>
????class?EventReceiver
????{
????????///?<summary>
????????///?The?main?entry?point?for?the?application.
????????///?</summary>
????????[STAThread]
????????static?void?Main(string[]?args)
????????{
????????????EventSender?c1?=?new?EventSender();
????????????//委托實例化后綁定到事件
????????????c1.OnUserRequest?+=?new?UserRequest(c1_OnUserRequest);
????????????c1.Run();
????????}
????????private?static?void?c1_OnUserRequest(object?sender,?OnUserRequestEventArgs?e)
????????{//事件處理方法
????????????Console.WriteLine("你觸發了事件"+e.InputText);
????????}
????}
????//定義委托
????public?delegate?void?UserRequest(object?sender,OnUserRequestEventArgs?e);
????///?<summary>
????///?帶事件數據的事件類,從EventArgs繼承
????///?</summary>
????public?class?OnUserRequestEventArgs?:?System.EventArgs
????{
????????private?string?_InputText;
????????public?string?InputText
????????{
????????????get
????????????{
????????????????return?_InputText;
????????????}
????????????set
????????????{
????????????????_InputText?=?value;
????????????}
????????}
????}
????///?<summary>
????///?事件發送類
????///?</summary>
????public?class?EventSender
????{
????????public?EventSender()
????????{
????????}
????????//定義一個委托類型的事件
????????public?event?UserRequest?OnUserRequest;
????????public?void?Run()
????????{
????????????while(true)
????????????{
????????????????if(Console.ReadLine()?==?"a")
????????????????{
????????????????????//事件監聽,產生事件
????????????????????OnUserRequestEventArgs?e?=?new?OnUserRequestEventArgs();
????????????????????e.InputText?=?"a";
????????????????????OnUserRequest(this,e);
????????????????}
????????????}
????????}
????}
}
?
轉載于:https://www.cnblogs.com/qiantuwuliang/archive/2009/05/30/1492442.html
總結
- 上一篇: 与其做梦 不如行动
- 下一篇: 活动目录的备份与还原