上次講了在繼承Control類的時候為什麼需要重寫Render方法
本次來介紹控件的事件處理. 我們知道Button控件有OnClick事件,DropDownList控件有SelectedIndexChanged事件.
一.回發事件和客戶端回發
下面來看一個最簡單的例子
按鈕單擊事件
1 protected void Button1_Click(object sender, EventArgs e)
2 {
3 Label1.Text = "你好: "+TextBox1.Text;
4 }
大家知道Web 服務器控件創建的按鈕的類型有三種
1.Button
2.LinkButton
3.ImageButton
打開MSDN看到三個控件都繼承IPostBackEventHandler接口
IPostBackEventHandler接口專門定義了處理回發事件的方法,說白了就是onclick事件,如果自定義控件需要處理回發事件,你就需要繼承IPostBackEventHandler接口,然後實現接口的RaisePostBackEvent 方法,另外一個簡單的方法就是直接繼承Button控件就可以了.
RaisePostBackEvent方法用於處理窗體發送給服務器時引發的事件,方法中有一個參數eventArgument 表示要傳遞到事件處理程序的可選事件參數的 String
下面總結處理回發事件,必須要做的步驟
(1)繼承並實現IPostBackEventHandler接口的RaisePostBackEvent方法
(2)為表單元素定義UniqueID,以與IPostBackEventHandler服務器控件的UniqueID相對應
相應實現代碼如下
示例一
namespace CustomControls
{
public class SuperButton1 : Control, IPostBackEventHandler
{
// 聲明Click事件委托
public event EventHandler Click;
// 定義OnClick事件處理程序
protected virtual void OnClick(EventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}
// 實現RaisePostBackEvent方法,處理回發事件
public void RaisePostBackEvent(string eventArgument)
{
OnClick(EventArgs.Empty);
}
protected override void Render(HtmlTextWriter output)
{
output.Write("<INPUT TYPE=submit name=" + this.UniqueID +
" Value='確定' />");
}
}
}