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

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供萬(wàn)秀網(wǎng)站建設(shè)、萬(wàn)秀做網(wǎng)站、萬(wàn)秀網(wǎng)站設(shè)計(jì)、萬(wàn)秀網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、萬(wàn)秀企業(yè)網(wǎng)站模板建站服務(wù),十年萬(wàn)秀做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
引發(fā)事件的類或?qū)ο螅梢苑Q之為事件源,注冊(cè)并對(duì)處理事件的類或者對(duì)象可以稱為事件訂閱者或者事件監(jiān)聽者,我比較喜歡稱之為事件監(jiān)聽者。
比如:構(gòu)建一個(gè)winform應(yīng)用,在窗體Form1簡(jiǎn)單放置一個(gè)按鈕控件,然后,雙擊按鈕,則可以進(jìn)入代碼視圖中按鈕click事件處理程序。
- private void button1_Click(object sender, EventArgs e)
- ///sender即表示事件源,e表示通過事件傳遞過來的消息
- }
這時(shí),還可以打開Form1.designer.cs,還可以找到如下代碼:
- 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ì)象定義事件
- //定義事件
- public event EventHandler myevnet;
第二步:在事件監(jiān)聽者,訂閱事件
- //事件注冊(cè)
- this.myevnet+=new EventHandler(MyEventHandler);
第三步:在事件監(jiān)聽者,編寫事件處理代碼:
- ///
- /// 事件的處理
- ///
- ///
- ///
- private void MyEventHandler(object sender, EventArgs e)
- {
- essageBox.Show("myevent is raised.......");
- }
第四步:在事件源對(duì)象引發(fā)事件
- //判斷事件是否被注冊(cè)
- if (myevnet != null)
- {
- //引發(fā)事件
- myevnet(this.button1, new EventArgs());
- }
這僅是個(gè)演示,供各位參考,下面給出完整代碼,方便測(cè)試
簡(jiǎn)單自定義事件,完整代碼
- public partial class Form1 : Form
- {
- //定義事件
- public event EventHandler myevnet;
- public Form1()
- {
- InitializeComponent();
- //事件注冊(cè)
- this.myevnet+=new EventHandler(MyEventHandler);
- }
- private void button1_Click(object sender, EventArgs e)
- {
- MessageBox.Show("button1_Click");
- //判斷事件是否被注冊(cè)
- if (myevnet != null)
- {
- //引發(fā)事件
- myevnet(this.button1, new EventArgs());
- }
- }
- ///
- /// 事件的處理
- ///
- ///
- ///
- private void MyEventHandler(object sender, EventArgs e)
- {
- MessageBox.Show("myevent is raised.......");
- }
- }
當(dāng)然,真環(huán)境下,自定義事件要比這個(gè)復(fù)雜一些,下面再舉一個(gè)例子,在事件引發(fā)時(shí),傳遞自定義的消息。
首先要自定義一個(gè)事件消息類,這個(gè)類繼承于EventArgs
然后自定義委托,來處理事件。完整代碼如下:
事件源方面:
事件源代碼
- ///自定義事件委托
- public delegate void MyeventHandler(object sender, MyEventArgs e);
- public partial class AddGrade : Form
- {
- //聲明事件
- public event MyeventHandler myCustomevent;
- public AddGrade()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- //dosomthing
- //事件引發(fā)
- if (myCustomevent != null)
- {
- myCustomevent(this, new MyEventArgs() {
- Message = this.textBox1.Text });
- }
- }
- }
- ///自定義事件消息類
- public class MyEventArgs : EventArgs
- {
- public string Message { set; get; }
- }
事件監(jiān)聽者方面:
事件監(jiān)聽
- public partial class EventDemo : Form
- {
- public EventDemo()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- AddGrade addGrad = new AddGrade();
- //注冊(cè)事件
- addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent);
- addGrad.Show();
- }
- void addGrad_myCustomevent(object sender, MyEventArgs e)
- {
- //dosomthing
- MessageBox.Show(e.Message);
- }
- }
原文鏈接:http://www.cnblogs.com/yangyancheng/archive/2011/04/24/2026240.html
網(wǎng)頁(yè)標(biāo)題:走進(jìn)C#基礎(chǔ)概念之事件
URL分享:http://www.5511xx.com/article/djpjioc.html


咨詢
建站咨詢
