您好,登錄后才能下訂單哦!
這篇文章主要介紹“C#事件怎么自定義”,在日常操作中,相信很多人在C#事件怎么自定義問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#事件怎么自定義”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
事件,是C#編程模型中重要的一個概念,通過對事件的理解,可以更好的了解C#程序運行機制。C#中的事件,可以簡單的理解為類或者對象發生了一件事,并且把這件事通知給了其他的類或者對象,其他的類或者對象可以根據事件的消息有所反應。這非常類似設計模式中的觀察者模式。
引發事件的類或對象,可以稱之為事件源,注冊并對處理事件的類或者對象可以稱為事件訂閱者或者事件監聽者,我比較喜歡稱之為事件監聽者。
比如:構建一個winform應用,在窗體Form1簡單放置一個按鈕控件,然后,雙擊按鈕,則可以進入代碼視圖中按鈕click事件處理程序。
private void button1_Click(object sender, EventArgs e) { ///sender即表示事件源,e表示通過事件傳遞過來的消息 }
這時,還可以打開Form1.designer.cs,還可以找到如下代碼:
this.button1.Click += new System.EventHandler(this.button1_Click);
這行代碼表明,當前窗體注冊了click事件(click就是Button對象的一個事件),并且用 button1_Click方法進行了處理。EventHandler是一個委托,關于委托可參見我的上一篇文章C#基礎概念之委托。
以上是對C#事件的一些簡單的解釋。當然,我們也可以自定義事件。
自定義事件,分為如下幾步:
第一步:首先在事件源對象定義事件
//定義事件 public event EventHandler myevnet;
第二步:在事件監聽者,訂閱事件
//事件注冊 this.myevnet+=new EventHandler(MyEventHandler);
第三步:在事件監聽者,編寫事件處理代碼:
/// <summary> /// 事件的處理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MyEventHandler(object sender, EventArgs e) { MessageBox.Show("myevent is raised......."); }
第四步:在事件源對象引發事件
//判斷事件是否被注冊 if (myevnet != null) { //引發事件 myevnet(this.button1, new EventArgs()); }
這僅是個演示,供各位參考,下面給出完整代碼,方便測試
簡單自定義事件,完整代碼:
public partial class Form1 : Form { //定義事件 public event EventHandler myevnet; public Form1() { InitializeComponent(); //事件注冊 this.myevnet+=new EventHandler(MyEventHandler); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("button1_Click"); //判斷事件是否被注冊 if (myevnet != null) { //引發事件 myevnet(this.button1, new EventArgs()); } } /// <summary> /// 事件的處理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MyEventHandler(object sender, EventArgs e) { MessageBox.Show("myevent is raised......."); } }
當然,真環境下,自定義事件要比這個復雜一些,下面再舉一個例子,在事件引發時,傳遞自定義的消息。
首先要自定義一個事件消息類,這個類繼承于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 //事件引發 if (myCustomevent != null) { myCustomevent(this, new MyEventArgs() { Message = this.textBox1.Text }); } } } ///自定義事件消息類 public class MyEventArgs : EventArgs { public string Message { set; get; } }
事件監聽者方面:
public partial class EventDemo : Form { public EventDemo() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { AddGrade addGrad = new AddGrade(); //注冊事件 addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent); addGrad.Show(); } void addGrad_myCustomevent(object sender, MyEventArgs e) { //dosomthing MessageBox.Show(e.Message); } }
到此,關于“C#事件怎么自定義”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。