程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#事件機制歸納(下)

C#事件機制歸納(下)

編輯:關於C語言
3.C#中預定義事件處理方式

學習事件,我覺得最不好理解的就是C#中預定義了事件,使我才開始學習事件時一頭霧水。在查了些資料後,終於弄明白了一些,如下:

EventArgs是包含事件數據的類的基類,用於傳遞事件的細節。

EventHandler是一個委托聲明如下(其在.Net類庫中如下聲明的)

public delegate void EventHandler( object sender , EventArgs e )
所以,所有形如:

void 函婁名(object 參數名,EventArgs 參數名);

的函數都可以作為Control類的Click事件響應方法了。如下面所定義的一個事件響應方法:

private void button1_Click(object sender, System.EventArgs e)

參數object sender表示引發事件的對象,(其實這裡傳遞的是對象的引用,如果是button1的click事件則sender就是button1)System.EventArgs e 代表事件的相應信息,如鼠標的x,y值等。

下面我們研究一下Button類看看其中的事件聲明,以Click事件為例。

public event EventHandler Click;

這裡定義了一個EventHandler類型的事件Click
private void button1_Click(object sender, System.EventArgs e)
{
...
}
這是我們和button1_click事件所對應的方法。注意方法的參數符合委托中的簽名(既參數列表)。那我們怎麼把這個方法和事件聯系起來呢,請看下面的代碼。
this.button1.Click += new System.EventHandler(this.button1_Click); (其實button1.Click 為System.EventHandler委派的實例事件。與委派中委派實例委托給某一方法非常相似)
把this.button1_Click方法綁定到this.button1.Click事件。





4.事件的參數的使用。

using System;



class Class1

{

static void Main()

{

Student s1=new Student();

s1.Name ="Student1";

Student s2=new Student();

s2.Name ="Student2";

s1.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);

s2.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);



//當Register方法一執行,觸發RegisterOK事件

//RegisterOK事件一觸發,然後執行Student_RegisterOK方法

s1.Register();

s2.Register();

Console.ReadLine();

}

static void Student_RegisterOK(RegisterOkArgs e)

{

Console.WriteLine(e.EventInfo);

}

}



class Student

{

public delegate void DelegateRegisterOkEvent(RegisterOkArgs e);

public event DelegateRegisterOkEvent RegisterOK;

public string Name;

public void Register()

{

Console.WriteLine("Register Method");

RegisterOK(new RegisterOkArgs("Student Name: "+Name));

}

}

class RegisterOkArgs:EventArgs

{

public string EventInfo;

public RegisterOkArgs(string eventInfo):base()

{

this.EventInfo =eventInfo;

}

}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved