C#視窗事件處理初探 (轉)

amyz發表於2007-08-15
C#視窗事件處理初探 (轉)[@more@]

視窗事件處理初探

:namespace prefix = o ns = "urn:schemas--com::office" />

事件(Event Driven)是C#視窗設計的核心,其重要性就相當於VC中的訊息對映,不瞭解事件驅動就無法深入視窗程式設計的殿堂。在C#語言中,事件的處理主要有兩種方法:委託式的事件處理(Delegation Event Model)與對可過載方法(Event Method)的過載。

1、委託式事件處理

  委託式事件處理模式,顧名思義,就是將特定的事件委託給負責事件處理的方法來進行。

  在中,類有資料成員(Data Member)與成員(Function Member)。此外還有 “事件成員(Event Member)”,來進行事件驅動的處理。

  事件成員就是那些與該類的相關的事件。它定義了在一個物件中會有哪些相關的事件發生。不同的類可以有不同的事件成員。

  事件處理可透過委託關係來進行。委託關係可以這樣來建立:

  .Event+=new EventHandle(Method);

  其含義是:如果物件object發生了Event事件,就交由方法Method來處理。一個物件可以委託多個不同的處理,“+=”用來增加新的委託關係。Method是真正進行事件處理的地方,格式為:

  public void Method(object sender,EventArgs e);

  EventArgs是.NET 中有關事件的基礎類,所有發生的事件都被包裝成EventArgs類或其子類的物件。當事件發生時,Method會收到這兩個引數。一旦建立了委託關係,自動在特定事件發生時,轉而您所委託的事件處理方法。

下面舉一個簡單的例子,執行時首先產生一個視窗,當點選視窗上的按鈕時,程式結束。程式碼如下:

using System;

using System..Forms;

class Form1:Form

{

  public static void Main()

  {

  Application.Run(new Form1());

  }

 

  public Form1():base()

  {

  Text="事件處理示例";

  Button button1=new Button();

  button1.Text="點選";

  //將button1的Click事件委託給countClick方法

  button1.Click+=new EventHandler(this.countClick);

  //將button1加到視窗中。

  Controls.Add(button1);

  }

  public void countClick(object sender,EventArgs e)

  {

  Application.Exit();

  }

}

2、過載事件方法

  在C#中,針對不同類所相關的事件,除了定義有事件成員外,也定義了可過載的事件方法,可透過過載這些事件方法來設計你所希望的對應事件處理。這些可過載的事件方法名稱皆以“On”開頭,且被宣告為“virtual”,一個被宣告成virtual的方法,就代表它可被過載,被宣告成overr的方法也代表它可被過載,如果宣告成abstract則必須被過載。例如按鈕的Click事件,就有一個對應的可過載的OnClick事件方法。

  仍然以上面的例子來說,程式碼如下:

using System;

using System.Windows.Forms;

class Button1:Button

{

  public static void Main()

  {

  Foform1=new Form();

  form1.Text="事件處理示例";

  Button1 button1=new Button1();

  button1.Text="點選";

  form1.Controls.Add(button1);

  Application.Run(form1);

  }

  protected override void OnClick(EventArgs e)

  {

  Application.Exit();

  }

}

  透過以上的例子看出,在C#中進行事件處理是相當簡便的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958385/,如需轉載,請註明出處,否則將追究法律責任。

相關文章