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

C#基礎(chǔ)概念之事件

開發(fā) 后端
時(shí)間在C#中是一個(gè)基礎(chǔ)的名詞,同是也是一個(gè)重要的概念。本文主要通過例子介紹事件這個(gè)概念,比較適合初學(xué)者的學(xué)習(xí),希望對(duì)你有所幫助。

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

引發(fā)事件的類或?qū)ο螅梢苑Q之為事件源,注冊(cè)并對(duì)處理事件的類或者對(duì)象可以稱為事件訂閱者或者事件監(jiān)聽者,我比較喜歡稱之為事件監(jiān)聽者。

比如:構(gòu)建一個(gè)winform應(yīng)用,在窗體Form1簡(jiǎn)單放置一個(gè)按鈕控件,然后,雙擊按鈕,則可以進(jìn)入代碼視圖中按鈕click事件處理程序。

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

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

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

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

以上是對(duì)C#事件的一些簡(jiǎn)單的解釋。當(dāng)然,我們也可以自定義事件。

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

***步:首先在事件源對(duì)象定義事件

 

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

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

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

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

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

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

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

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

簡(jiǎn)單自定義事件,完整代碼:

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

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

首先要自定義一個(gè)事件消息類,這個(gè)類繼承于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(thisnew MyEventArgs() { Message = this.textBox1.Text });  
  18. }  
  19. }  
  20. }  
  21. ///自定義事件消息類  
  22. public class MyEventArgs : EventArgs  
  23. {  
  24. public string Message { setget; }  

事件監(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. //注冊(cè)事件  
  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. 走進(jìn)C#奇妙函數(shù)之ToLookup
  2. 淺談C++調(diào)用C#的DLL程序方法
  3. C#選擇正確的集合進(jìn)行編碼
  4. C#圖片處理的3種高級(jí)實(shí)用方法
責(zé)任編輯:于鐵 來源: 博客園
相關(guān)推薦

2011-04-26 08:56:31

C#

2009-08-13 18:02:50

C#基礎(chǔ)概念

2011-04-22 09:14:26

C#委托

2009-09-17 17:44:51

C#動(dòng)態(tài)數(shù)組

2009-08-13 11:10:32

C#基礎(chǔ)概念

2009-08-13 10:52:03

C#基礎(chǔ)概念

2011-06-08 14:22:51

延遲加載

2009-08-06 13:08:23

ASP.NET控件開發(fā)

2015-11-06 13:59:01

JavaScript事件處理

2009-09-02 10:58:02

C#動(dòng)態(tài)數(shù)組

2009-06-22 09:23:18

事件監(jiān)聽器

2009-08-07 17:57:26

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

2009-08-28 09:43:05

C#事件

2009-08-12 15:20:21

C#事件處理

2009-08-18 10:48:25

C#事件

2009-08-25 17:49:07

C#入門

2009-09-14 13:44:14

Lambda ExprC# Lambda

2024-06-11 00:00:30

C#編程線程

2017-06-12 10:31:17

Redis源碼學(xué)習(xí)事件驅(qū)動(dòng)

2009-08-14 18:00:22

C#Windows應(yīng)用
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲国产日韩一区 | 91精品国产91久久久久游泳池 | 国产精品美女久久久久久不卡 | 成人免费视频网站在线观看 | av中文字幕在线观看 | 涩在线| www.免费看片.com | 99精品国产一区二区三区 | 九九热精品视频在线观看 | 日本黄色大片免费 | 精品欧美一区二区三区久久久 | 国际精品久久 | 久久久久久久久蜜桃 | 国产电影一区二区在线观看 | 精产国产伦理一二三区 | 免费观看毛片 | 欧美 日韩 综合 | 欧美一区免费 | 久久久精品视 | 色吧综合网 | 黄久久久 | 波多野结衣一区二区 | 久久国产区| 国产传媒在线播放 | 日韩一区二区福利视频 | 91av视频在线播放 | 成人av一区 | 国产激情视频在线观看 | 一级毛片免费完整视频 | 欧美一级高潮片免费的 | 欧美色综合 | 亚洲一二三区在线观看 | 久久大 | 色综合视频 | 国内精品久久久久久影视8 最新黄色在线观看 | 亚洲免费视频一区 | 欧美性大战久久久久久久蜜臀 | 亚洲精品综合 | 亚洲人成在线观看 | 一区二区三区在线 | 国产精品视频导航 |