閱讀目錄
一:ASP.NET視窗事件處理
二:委託式的事件處理模式
三:重載式的事件處理模式
一:ASP.NET視窗事件處理
. 事件驅動是視窗程序設計的核心,不瞭解事件驅動就無法進入視窗程序設計的殿堂
. Windows中的事件和ASP.NET中的事件的區別是什嗎?
在Windows中我們的機器是單一的,我們的機器即是伺服器也是用戶端就是一台機器,在Windows中你點擊了按鈕就是伺服器當中的按鈕,所以正兒八經的就是面向事件的編程,而在ASP.NET中,你點擊的是用戶端的按鈕,執行的確實伺服器端的事件,雖然它們是伺服器控制項最終會在瀏覽器中呈現出來,所以對於一千個人,一萬個人看到的是同一個控制項,這麼多人點擊了按鈕,實際上通過用戶端來點擊的,最後執行的是伺服器端的事件,看似好像是點擊伺服器端的按鈕,這實際上是有一個類比的過程,是通過javascript的一個函數類比伺服器端的事件
. 在C#主要有兩種事件處理模式,無論是WindowsAPP還是ASP.NET
-委託式的事件處理模式
-重載式的事件處理模式
二:委託式的事件處理模式
. 委託式的事件處理模式,就是將特定的事件委託給負責事件處理的方法來進行
. 在.NET中,類有資料成員(屬性),函數成員(方法),事件成員(事件),事件成員就是那些與該類的對象相關的事件
. 事件處理可以通過委託關係來進行,委託關係關係這樣來建立object.Event+=new EventHandle(Method);它的含義就是如果對象object發生了Event事件,就交由方法Method來處理,一個對象可以委託多個不同的處理,“+=”用來增加新的委託關係
. Method是真正進行事件處理的地方,格式為:public void Method(object sender, EventArgs e);object sender指是觸發事件的按鈕,也就是觸發事件的控制項,EventArgs是.NETFramework中有關事件的基礎類,所有發生的事件都被封裝成EventArgs類或者其子類的對象,當事件發生時,Method會收到這兩個參數,一旦建立了委託關係,系統自動的會在特定事件發生時,轉而執行你所委託的事件處理方法
. 我們看看伺服器端事件背後到底發生了什麼
1:Default.aspx 設計檔案
2:Default.aspx.cs 代碼檔案
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ServerEvent
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.btnTwo.Click += new EventHandler(this.btnTwo_Click);
}
/// <summary>
/// 設計時添加事件,什麼叫“設計時添加事件”就是我們從工具箱拖一個按鈕,雙擊添加的一個事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOne_Click(object sender, EventArgs e)
{
//實際上是在背後產生了這樣一段代碼 this.btnOne.Click += new EventHandler(this.btnOne_Click);把Click事件和btnOne_Click事件處理函數關聯起來了
Response.Write("設計時添加事件");
}
/// <summary>
/// 運行時添加事件,如果你沒有從工具箱拖一個按鈕雙擊添加了一個事件,那麼可以採用運行時添加事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnTwo_Click(object sender, EventArgs e)
{
Response.Write("運行時添加事件");
}
}
}
三:重載式的事件處理模式
. 在C#中,針對不同類所相關的事件,除了定義有事件成員外,也定義了可重載的事件方法,可通過重載這些事件方法來設計你所希望的對應事件處理,說白了就是在C#中,好多類都提供了一些可以重載的事件方法,就是它已經定義好了這些事件了,只不過我們需要通過衍生類別中自己重新去定義一下就行了
. 這些可重載的事件方法名稱皆為“On”開頭,而且被聲明為“virtual”,一個被聲明為“virtual”的方法就代表它可以被重載,被聲明為“onverride”的方法也代表它可以被重載,如果聲明為“abstract”則表示它必須被重載,例如:按鈕的Click事件,就有一個對應的可重載的OnClick事件方法
. 把按鈕控制項重載了,把它派產生一個類,然後把它需要的方法重載了,自訂控制項的好處就是可以在好多地方使用,這就是代碼的可重複性
我們可以從”物件瀏覽器“來看Web伺服器控制項有哪些事件方法可以重載
1:MyCustomButtonControl.cs ASP.NET伺服器控制項類
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ServerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyButton runat=server></{0}:MyButton>")]
//“MyButton”指的是我的自訂按鈕控制項,從“Button”派生一個我自訂的Button
public class MyButton : System.Web.UI.WebControls.Button
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public new string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "[" + this.ID + "]" : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void OnClick(EventArgs e)
{
this.Page.Response.Write("重載式的事件處理模式");
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
2:添加我們自訂的Button控制項
在工具箱選擇“選擇項”,然後選擇我們MyCustomButtonControl.cs編譯好的dll就行了
3:Default.aspx 設計檔案
拖動“MyButton”到我們的頁面