程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 委托(delegate)在自定義控件的應用

委托(delegate)在自定義控件的應用

編輯:關於C#

在自定義用戶控件中,我們經常要添加自定義的事件,這時就要使用到委托(delegate)了。

在做開發中,經常都要用到登錄。那麼,我們就把登錄的界面做成一個控件,以後再使用它就方便多了。

登錄界面很簡單,隨便做做的,它有一個“登錄”的按鈕。我們需要當點擊“登錄”按鈕時,它能執行我們在其它頁面定義的登錄操作,這時就需要用到委托了,把登錄操作委托給“登錄”按鈕來執行。下面是用戶控件的後台代碼:

Code
public partial class WebUserControl : System.Web.UI.UserControl
{
  public event EventHandler LoginClick;
  protected void Page_Load(object sender, EventArgs e)
  {

  }
  protected void Button1_Click(object sender, EventArgs e)
  {
    LoginClick(sender, e);
  }
}

事件使用關鍵字event修飾,它的類型是委托類的。在APS.NET的頁面上,我們就可以為事件添加方法了:

Code
<uc1:WebUserControl ID="WebUserControl1" runat="server" OnLoginClick="Login_Click" /></div>

Code
protected void Login_Click(object sender, EventArgs e)
{
  Response.Write("<script>alert('Logined')</script>");
}

運行結果如圖:

但是這樣還不夠,我們需要獲取用戶輸入的用戶名和密碼,其中比較好的一種做法是自定義擴展EventArgs類:

Code
public class LoginEventArgs : EventArgs
{
  private string userName;
  public string UserName
  {
    get { return userName; }
    set { userName = value; }
  }
  private string password;
  public string Password
  {
    get { return password; }
    set { password = value; }
  }
}

定義一個登錄委托類:

Code
public delegate void LoginEventHandler(object sender, LoginEventArgs e);

修改一下剛才的代碼:

Code
public partial class WebUserControl : System.Web.UI.UserControl
{
  public event LoginEventHandler LoginClick;
  protected void Page_Load(object sender, EventArgs e)
  {

  }
  protected void Button1_Click(object sender, EventArgs e)
  {
    LoginEventArgs loginE = new LoginEventArgs();
    loginE.UserName = TextBox1.Text;
    loginE.Password = TextBox2.Text;
    LoginClick(sender, loginE);
  }
}

Code
public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
  }
  protected void Login_Click(object sender, LoginEventArgs e)
  {
    Response.Write("<script>alert('UserName:"+e.UserName+",Password:"+e.Password+"')</script>");
  }
}

運行結果如圖:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved