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