日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#基礎概念之事件

 事件,是C#編程模型中重要的一個概念,通過對事件的理解,可以更好的了解C#程序運行機制。C#中的事件,可以簡單的理解為類或者對象發(fā)生了一件事,并且把這件事通知給了其他的類或者對象,其他的類或者對象可以根據(jù)事件的消息有所反應。這非常類似設計模式中的觀察者模式。

君山網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)。

引發(fā)事件的類或對象,可以稱之為事件源,注冊并對處理事件的類或者對象可以稱為事件訂閱者或者事件監(jiān)聽者,我比較喜歡稱之為事件監(jiān)聽者。

比如:構建一個winform應用,在窗體Form1簡單放置一個按鈕控件,然后,雙擊按鈕,則可以進入代碼視圖中按鈕click事件處理程序。

 
 
 
  1. private void button1_Click(object sender, EventArgs e)   
  2. {   
  3. ///sender即表示事件源,e表示通過事件傳遞過來的消息   
  4. }  

這時,還可以打開Form1.designer.cs,還可以找到如下代碼:

 
 
 
  1. this.button1.Click += new System.EventHandler(this.button1_Click); 

這行代碼表明,當前窗體注冊了click事件(click就是Button對象的一個事件),并且用 button1_Click方法進行了處理。EventHandler是一個委托,關于委托可參見我的上一篇文章C#基礎概念之委托。

以上是對C#事件的一些簡單的解釋。當然,我們也可以自定義事件。

自定義事件,分為如下幾步:

***步:首先在事件源對象定義事件

 
 
 
  1. //定義事件 public event EventHandler myevnet; 

第二步:在事件監(jiān)聽者,訂閱事件 

 
 
 
  1. //事件注冊 this.myevnet+=new EventHandler(MyEventHandler);  

第三步:在事件監(jiān)聽者,編寫事件處理代碼:

 
 
 
  1. ///    
  2. /// 事件的處理   
  3. ///    
  4. ///    
  5. ///    
  6. private void MyEventHandler(object sender, EventArgs e)   
  7. {   
  8. MessageBox.Show("myevent is raised.......");   

第四步:在事件源對象引發(fā)事件

 
 
 
  1. //判斷事件是否被注冊  
  2.  if (myevnet != null)   
  3. {   
  4. //引發(fā)事件 myevnet(this.button1, new EventArgs());   
  5. }  

這僅是個演示,供各位參考,下面給出完整代碼,方便測試

簡單自定義事件,完整代碼:

 
 
 
  1. public partial class Form1 : Form   
  2. {   
  3. //定義事件   
  4. public event EventHandler myevnet;   
  5. public Form1()   
  6. {   
  7. InitializeComponent();   
  8. //事件注冊  
  9. this.myevnet+=new EventHandler(MyEventHandler);  
  10. }  
  11. private void button1_Click(object sender, EventArgs e)  
  12. {  
  13. MessageBox.Show("button1_Click");  
  14. //判斷事件是否被注冊  
  15. if (myevnet != null)  
  16. {  
  17. //引發(fā)事件  
  18. myevnet(this.button1, new EventArgs());  
  19. }  
  20. }  
  21. ///   
  22. /// 事件的處理  
  23. ///   
  24. ///   
  25. ///   
  26. private void MyEventHandler(object sender, EventArgs e)  
  27. {  
  28. MessageBox.Show("myevent is raised.......");  
  29. }  

當然,真環(huán)境下,自定義事件要比這個復雜一些,下面再舉一個例子,在事件引發(fā)時,傳遞自定義的消息。

首先要自定義一個事件消息類,這個類繼承于EventArgs

然后自定義委托,來處理事件。完整代碼如下:

事件源方面:

 
 
 
  1. ///自定義事件委托   
  2. public delegate void MyeventHandler(object sender, MyEventArgs e);   
  3. public partial class AddGrade : Form   
  4. {   
  5. //聲明事件   
  6. public event MyeventHandler myCustomevent;   
  7. public AddGrade()   
  8. {   
  9. InitializeComponent();  
  10. }  
  11. private void button1_Click(object sender, EventArgs e)  
  12. {  
  13. //dosomthing  
  14. //事件引發(fā)  
  15. if (myCustomevent != null)  
  16. {  
  17. myCustomevent(this, new MyEventArgs() { Message = this.textBox1.Text });  
  18. }  
  19. }  
  20. }  
  21. ///自定義事件消息類  
  22. public class MyEventArgs : EventArgs  
  23. {  
  24. public string Message { set; get; }  

事件監(jiān)聽者方面:

 
 
 
  1. public partial class EventDemo : Form   
  2. {   
  3. public EventDemo()   
  4. {   
  5. InitializeComponent();   
  6. }  
  7. private void button1_Click(object sender, EventArgs e)  
  8. {  
  9. AddGrade addGrad = new AddGrade();  
  10. //注冊事件  
  11. addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent);  
  12. addGrad.Show();   
  13. }  
  14. void addGrad_myCustomevent(object sender, MyEventArgs e)  
  15. {  
  16. //dosomthing  
  17. MessageBox.Show(e.Message);  
  18. }  

【編輯推薦】

  1. 走進C#奇妙函數(shù)之ToLookup
  2. 淺談C++調用C#的DLL程序方法
  3. C#選擇正確的集合進行編碼
  4. C#圖片處理的3種高級實用方法

當前文章:C#基礎概念之事件
瀏覽地址:http://www.dlmjj.cn/article/dpideoi.html