成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#自定義事件步步通

開發(fā) 后端
本文介紹了觀察著模式及C#自定義事件的實現(xiàn)步驟。

做windows編程總要想辦法處理事件,例如捕捉按鈕的雙擊事件、處理菜單項的單擊事件、對Label上的鼠標(biāo)的移動作出反映等。但是怎樣在自定義的控件中創(chuàng)建自定義的事件呢?通過這篇文章,你將學(xué)會怎樣使用觀察者模式(Observer design pattern )激發(fā)并處理 .NET 控件的事件,學(xué)習(xí)C#自定義事件,并學(xué)會傳遞事件參數(shù)。

事件是對象發(fā)出的消息,它通知其它對象動作的發(fā)生。動作可以是用戶激發(fā)的,如鼠標(biāo)點擊,也可以由一些程序邏輯激發(fā)。產(chǎn)生事件的對象稱為事件發(fā)送者,接受事件通知的對象稱為事件接收者。事件接收者有能夠?qū)κ录鞒龇从车姆椒ā?/P>

.NET Framework 能夠很容易地實現(xiàn)事件驅(qū)動的window編程。程序開發(fā)人員無需了解.NET的事件是 如何工作的。我們需要記住的是:如果你想要從window控件獲取事件,你提供一Event Handler,然后將它注冊到事件源,這就是事件編寫。在C#中,語法如下,通常都寫在Form的構(gòu)造方法中。

  1. eventSource.someEvent += new SomeEventHandler(someMethod); 

以處理button1控件的Click事件為例,但Click事件發(fā)生時將執(zhí)行button1_Clicked方法。你可以這樣寫:

  1. button1.click+=new EventHandler(button1_Clicked);  
  2.  

然后button1_Clicked方法的實現(xiàn)如下:

  1. private void button1_Clicked(Object sender,EventArgs e)   
  2. {   
  3.     //code to be executed when the Click event occurs   
  4. }  
  5.  

這個方法并非必須為private,但是它必須接受兩個參數(shù):一個是Object 對象,另一個是EventArgs 對象。所以我們可以假設(shè)事件是一塊蛋糕。接下來我門來看看怎樣創(chuàng)建自定義事件以讓其它程序員來使用。在這之前,我們來討論對象編程中的觀察者模式。

觀察者模式(Observer Pattern)

觀察者模式有兩個重要的對象:觀察主體和觀察者。每個觀察主體有一到多個觀察者。這些觀察者監(jiān)聽來自觀察主題狀態(tài)變化的通知。觀察者模式也叫做依賴模式或發(fā)布—訂閱模式。四人幫(Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)在他們寫的《Design Patterns:Elements of Reusable Object-Oriented Software》書中提到觀察者模式可以應(yīng)用在以下幾種場合:

一個抽象有兩個方面,這兩個方面彼此依賴。將這兩個方面封裝在不同的對象中,這樣你就可以獨立地修改和重用它們。

一個對象的改變需要改變其它對象,并且有多少對象需要隨之改變未知。

一個對象需要通知其它對象,但并不知道要通知哪些對象。換言之,你并不希望這些對象被緊緊地捆綁在一起。

事件通信時,事件發(fā)生者并不知道哪些對象或方法將收到市靜安發(fā)生的通知,它只是持有與簽名符合的方法的引用。代理相當(dāng)于類項安全的函數(shù)指針或者回調(diào)。接下來我們將解釋怎樣使用代理來傳遞事件消息。再然后我們將通過一個擁有兩個自定義控件的例子將理論應(yīng)用于實際。

c#自定義事件步步通

假定你要為自定義控件MyControl寫自定義事件MyEvent,其中MyControl擴(kuò)展自System.Windows.Forms.UserControl。以下是關(guān)鍵步驟:

1.  聲明公有的delegate,這里我們命名為MyEventHandler。MyEventHandler有兩個參數(shù)。Object對象sender和MyEventArgs對象e。關(guān)于MyEventArgs我們將在后面定義。需要注意的是delegate必須聲明在你的自定義控件之外。

  1. public delegate void MyEventHandler(object sender,MyEventArgs e);   
  2. public class MyControl:UserControl   
  3. {   
  4.     ……   
  5. }   

2.  1中的MyEventArgs是這樣一個對象,它持有由事件發(fā)生者傳遞給事件接收者的數(shù)據(jù)。MyEventArgs必須繼承自System.EventArgs。這時的代碼如下:

  1. public class MyEventArgs:System.EventArgs   
  2. {   
  3.     ……   
  4. }   
  5. public delegate void MyEventHandler(object sender,MyEventArgs e);   
  6. public class MyControl:UserControl   
  7. {   
  8.     ……   
  9. }   

需要在MyEventArgs類中寫一些具體實現(xiàn)。這一點我們會在以后講到。

3.  在自定義控件類中,聲明一個事件,聲明為MyEvent。

  1. public class MyEventArgs:System.EventArgs   
  2. {   
  3.     ……   
  4. }   
  5. public delegate void MyEventHandler(object sender,MyEventArgs e);   
  6. public class MyControl:UserControl   
  7. {   
  8.     public event MyEventHandler MyEvent;   
  9.     ……   
  10. }   

4.  在自定義控件類中,聲明受保護(hù)的虛方法,命名規(guī)則是在事件名字的前面加上On。既然我們的事件命名為MyEvent,那么這個方法就叫做OnMyevent。OnMyevent方法有一個MyEventArgs類型的參數(shù)。這個方法用來生成事件。在c#中直接調(diào)用事件名字來生成事件。生成事件需要傳遞兩個參數(shù):事件發(fā)生者和傳遞給方法的參數(shù)MyEventArgs。

  1. public class MyEventArgs:System.EventArgs   
  2. {   
  3.     ……   
  4. }   
  5. public delegate void MyEventHandler(object sender,MyEventArgs e);   
  6. public class MyControl:UserControl   
  7. {   
  8.     public event MyEventHandler MyEvent;   
  9.     protected virtual void OnMyEvent(MyEventArgs e)   
  10.     {   
  11.         MyEvent(this,e);   
  12.     }   
  13.     ……   
  14. }   

最后一步就是在自定義控件類中實際地調(diào)用OnMyEvent。

這樣,c#自定義事件的步驟就完成了。

【編輯推薦】

  1. C#基礎(chǔ)知識一覽
  2. 學(xué)習(xí)C#自定義用戶控件
  3. C#自定義組件和用戶組件屬性的設(shè)置
  4. C#編程中的組件-事件-委托
  5. Visual C#自定義組件的設(shè)計:Pop3Com組件
責(zé)任編輯:book05 來源: gofreeserve
相關(guān)推薦

2009-08-04 09:56:46

C#事件處理自定義事件

2009-09-03 15:46:57

C#自定義事件

2009-08-04 12:56:51

C#自定義事件

2009-10-23 10:05:36

2009-08-04 13:31:35

C#自定義事件

2009-08-04 13:53:58

C#委托類C#事件

2009-11-02 17:32:37

VB.NET抽象類

2009-08-04 08:58:01

C#自定義特性

2009-08-03 13:34:06

自定義C#控件

2009-08-28 17:45:19

C#自定義數(shù)據(jù)

2009-08-03 13:39:46

C#自定義用戶控件

2009-08-12 14:53:50

C#類型轉(zhuǎn)換函數(shù)

2024-09-11 14:46:48

C#旋轉(zhuǎn)按鈕

2021-06-17 06:52:37

C#自定義異常

2009-08-05 17:03:37

C#自定義控件

2009-08-07 17:57:26

C#定義事件應(yīng)用

2021-03-29 00:02:10

C#Attribute元素

2009-08-04 13:07:46

C#自定義快捷鍵

2009-08-05 18:01:20

C#自定義異常處理

2009-08-17 17:24:02

C#自定義消息框
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久成人高清视频 | 色香婷婷 | 久久这里有精品 | www.黄色网 | 亚洲视频在线观看 | 国产福利视频网站 | 国产精品特级毛片一区二区三区 | 国产激情视频在线观看 | 日本精品久久久久久久 | 国产一区中文 | 欧美一区二区三区的 | 欧美一级黄色片免费观看 | 亚洲第一av | 亚洲精品在线免费观看视频 | 欧美日韩亚洲视频 | 日韩不卡一区二区 | 国产精品日韩在线观看 | 亚洲一区视频在线播放 | 91网站在线看 | 综合网视频 | 欧美精品v国产精品v日韩精品 | a在线视频 | 嫩草研究影院 | 羞羞的视频免费看 | 国产亚洲欧美日韩精品一区二区三区 | 国产女人与拘做受免费视频 | 久久久久国产成人精品亚洲午夜 | 2018国产精品 | 伊人网综合在线 | 欧美在线网站 | 久久成人18免费网站 | 亚洲乱码一区二区三区在线观看 | 成人欧美一区二区 | 国产人成在线观看 | 精品久久久一区二区 | 国产亚洲成av人在线观看导航 | 久久久久九九九女人毛片 | 欧美精品久久一区 | 玩丰满女领导对白露脸hd | 国产精品无码久久久久 | 中文字幕亚洲视频 |