本身今天晚上是要寫一篇關於自定義事件的部落格,然後自己再擼會**。可是計畫不如變化,今天聽到同事談到陳冠希拍紀錄片,所以就去優酷上看了一下,連著看完了,要知道我這人有點強迫症,要搞一件事情一定要搞完的,所以現在已經快11點了,記錄完這個就去睡覺了。
關於c#自定義事件,通俗的講,它就是乙個特殊的委託。可以這麼想,我們將一件事交給委託人,我們不希望它什麼時候都可以做這件事,而是希望他們在特定的情況下做這件事,那麼這個特定的情況就是事件發生的前提,這個事件一旦發生,委託上繫結的方法就會發生。所以說事件是被限制的委託,它本身就是乙個物件(可以理解為類中的乙個字段),它不能在類外像方法一樣被呼叫,只能對其做+=或-=的註冊和取消事件操作。而委託是一種型別,所以它可以在類外被宣告和初始化(即做=操作)
自定義事件
這裡模擬乙個keydown事件,即監聽鍵盤按下的事件來理解如何自定義事件。
上面說了事件是乙個物件,可以理解為乙個字段,那麼它就要被封裝在乙個類中,這個類便是事件源類(即事件發生的地點),這裡便於理解,我們將這個類定義為keyboard(鍵盤)類。
class keyboard}}
}
如上所示,我們定義了乙個處理鍵盤被按下的委託keyboarddown,因為鍵盤被按下是乙個發生的動作,所以為了知道這個動作什麼時候發生我們再執行委託的方法,所以我們定義了乙個事件物件keydown,當鍵盤被按下發生的時候去執行註冊在事件keydown物件上的事件方法。而onkeydown方法就是用來監視鍵盤被按下,即觸發事件的方法。這裡的usereventargs 就是模擬的鍵盤上的鍵類,它裡面有key屬性:
public
class usereventargs
}
它就是用來儲存觸發事件的一些具體細節,例如當我們按鈕被click的時候用的是滑鼠左鍵觸發,還是右鍵等等。即儲存觸發者的一些資訊。這裡的觸發者是鍵盤上的鍵,所以這個類就有了key屬性。
測試自定義事件
既然已經有了事件,我們就可以像使用button按鈕註冊事件那樣,來對自己的自定義事件進行註冊了:
static
void main(string args)
註冊了事件,我們就要寫關於這個事件的方法了:
static
void test1event_keydown(object sender, usereventargs e)
static
void testevent_keydown(object sender, usereventargs e)
", e.key);
}
這樣是不是很像我們平常使用button按鈕的事件一樣。
測試結果:
總結
這個自定義事件的編寫對以後的開發很有幫助,事件是乙個物件,乙個特殊的委託物件,他的特殊在於在類外你必須註冊使用,而不能直接呼叫,這與一般的委託物件不同,因為註冊給它的方法是在特定情況下才能夠被執行的,如果可以呼叫,那就相當於直接執行了註冊方法,這樣就失去了事件的意義了。而委託是一種型別,能夠執行指定方法的型別。理解這一點是最重要的
C 事件 自定義事件
事件有很多,比如說 滑鼠的事件 mousermove,mouserdown等。鍵盤的事件 keyup,keydown,keypress。有事件,就會有對事件進行處理的方法,而事件和處理方法之間是怎麼聯絡起來的呢?委託就是他們中間的橋梁,事件發生時,委託會知道,然後將事件傳遞給處理方法,處理方法進行相...
c 自定義事件
此 摘自 叩響c 之門 c sharp view plain copy using system 事件傳送者 class dog 事件接收者 class host 註冊事件處理程式 public host dog dog 現在來觸發事件 class program 午夜零點小偷到達,看門狗引發ala...
C 自定義事件
簡單的自定義事件 首先定義乙個類來監聽客戶端事件,這裡我們監聽鍵盤的輸入。定義乙個委託。public delegate void userrequest object sender,eventargs e 前面的object用來傳遞事件的發生者,後面的eventargs用來傳遞事件的細節,現在暫時沒...