程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 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