事件,是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是一個委托,關於委托可參見我的上一篇文章html">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());
}
這僅是個演示,供各位參考,下面給出完整代碼,方便測試
簡單自定義事件,完整代碼1 public partial class Form1 : Form
2 {
3 //定義事件
4 public event EventHandler myevnet;
5
6 public Form1()
7 {
8 InitializeComponent();
9 //事件注冊
10 this.myevnet+=new EventHandler(MyEventHandler);
11
12 }
13
14