如何使用事件
事件有很多,比如說(shuō)鼠標(biāo)的事件:MouserMove,MouserDown等,鍵盤(pán)的事件:KeyUp,KeyDown,KeyPress。
有事件,就會(huì)有對(duì)事件進(jìn)行處理的方法,而事件和處理方法之間是怎么聯(lián)系起來(lái)的呢?委托就是他們中間的橋梁,事件發(fā)生時(shí),委托會(huì)知道,然后將事件傳遞給處理方法,處理方法進(jìn)行相應(yīng)處理。
比如在WinForm中最常見(jiàn)的是按鈕的Click事件,它是這樣委托的:this.button1.Click?+=?new?System.EventHandler(this.button1_Click);按按鈕后就會(huì)出發(fā)button1_Click方法進(jìn)行處理。EventHandler就是系統(tǒng)類(lèi)庫(kù)里已經(jīng)聲明的一個(gè)委托。
EventHandler以及其它自定義的事件委托都是一類(lèi)特殊的委托,他們有相同的形式:
delegate?void?事件委托名(object?sender,EventArgs?e);
object用來(lái)傳遞事件的發(fā)生者,比如二中的Button控件就是一個(gè)事件發(fā)生者;EventArgs用來(lái)傳遞事件的細(xì)節(jié)。
示例:
?
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();
????????????//委托實(shí)例化后綁定到事件
????????????c1.OnUserRequest?+=?new?UserRequest(c1_OnUserRequest);
????????????c1.Run();
????????}
????????private?static?void?c1_OnUserRequest(object?sender,?EventArgs?e)
????????{//事件處理方法
????????????Console.WriteLine("\t你觸發(fā)了事件!");
????????}
????}
????//定義委托
????public?delegate?void?UserRequest(object?sender,EventArgs?e);
????///?<summary>
????///?事件發(fā)送類(lèi)
????///?</summary>
????public?class?EventSender
????{
????????public?EventSender()
????????{
????????}
????????//定義一個(gè)委托類(lèi)型的事件
????????public?event?UserRequest?OnUserRequest;
????????public?void?Run()
????????{
????????????while(true)
????????????{
????????????????if(Console.ReadLine()?==?"a")
????????????????{
????????????????????//事件監(jiān)聽(tīng),產(chǎn)生事件
????????????????????OnUserRequest(this,new?EventArgs());
????????????????}
????????????}
????????}
????}
}
?
帶事件數(shù)據(jù)的事件示例:
?
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();
????????????//委托實(shí)例化后綁定到事件
????????????c1.OnUserRequest?+=?new?UserRequest(c1_OnUserRequest);
????????????c1.Run();
????????}
????????private?static?void?c1_OnUserRequest(object?sender,?OnUserRequestEventArgs?e)
????????{//事件處理方法
????????????Console.WriteLine("你觸發(fā)了事件"+e.InputText);
????????}
????}
????//定義委托
????public?delegate?void?UserRequest(object?sender,OnUserRequestEventArgs?e);
????///?<summary>
????///?帶事件數(shù)據(jù)的事件類(lèi),從EventArgs繼承
????///?</summary>
????public?class?OnUserRequestEventArgs?:?System.EventArgs
????{
????????private?string?_InputText;
????????public?string?InputText
????????{
????????????get
????????????{
????????????????return?_InputText;
????????????}
????????????set
????????????{
????????????????_InputText?=?value;
????????????}
????????}
????}
????///?<summary>
????///?事件發(fā)送類(lèi)
????///?</summary>
????public?class?EventSender
????{
????????public?EventSender()
????????{
????????}
????????//定義一個(gè)委托類(lèi)型的事件
????????public?event?UserRequest?OnUserRequest;
????????public?void?Run()
????????{
????????????while(true)
????????????{
????????????????if(Console.ReadLine()?==?"a")
????????????????{
????????????????????//事件監(jiān)聽(tīng),產(chǎn)生事件
????????????????????OnUserRequestEventArgs?e?=?new?OnUserRequestEventArgs();
????????????????????e.InputText?=?"a";
????????????????????OnUserRequest(this,e);
????????????????}
????????????}
????????}
????}
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/qiantuwuliang/archive/2009/05/30/1492442.html
總結(jié)
- 上一篇: 与其做梦 不如行动
- 下一篇: 活动目录的备份与还原