zoukankan      html  css  js  c++  java
  • 委托(delegate)在自定义控件的应用

     

      在自定义用户控件中,我们经常要添加自定义的事件,这时就要使用到委托(delegate)了。

      在做开发中,经常都要用到登录。那么,我们就把登录的界面做成一个控件,以后再使用它就方便多了。

      登录界面很简单,随便做做的,它有一个“登录”的按钮。我们需要当点击“登录”按钮时,它能执行我们在其它页面定义的登录操作,这时就需要用到委托了,把登录操作委托给“登录”按钮来执行。下面是用户控件的后台代码:

    1. public partial class WebUserControl : System.Web.UI.UserControl
    2. {
    3.     public event EventHandler LoginClick;
    4.     protected void Page_Load(object sender, EventArgs e)
    5.     {
    6.         
    7.     }
    8.     protected void Button1_Click(object sender, EventArgs e)
    9.     {
    10.         LoginClick(sender, e);
    11.     }
    12. }

      事件使用关键字event修饰,它的类型是委托类的。在APS.NET的页面上,我们就可以为事件添加方法了:

    1. <uc1:WebUserControl ID="WebUserControl1" runat="server" OnLoginClick="Login_Click"  /></div>
    1. protected void Login_Click(object sender, EventArgs e){    Response.Write("<script>alert('Logined')</script>");}

      运行结果如图:

      但是这样还不够,我们需要获取用户输入的用户名和密码,其中比较好的一种做法是自定义扩展EventArgs类:

    1. public class LoginEventArgs : EventArgs
    2. {
    3.     private string userName;
    4.     public string UserName
    5.     {
    6.         get { return userName; }
    7.         set { userName = value; }
    8.     }
    9.     private string password;
    10.     public string Password
    11.     {
    12.         get { return password; }
    13.         set { password = value; }
    14.     }
    15. }

      定义一个登录委托类:

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

     修改一下刚才的代码:

    1. public partial class WebUserControl : System.Web.UI.UserControl
    2. {
    3.     public event LoginEventHandler LoginClick;
    4.     protected void Page_Load(object sender, EventArgs e)
    5.     {
    6.         
    7.     }
    8.     protected void Button1_Click(object sender, EventArgs e)
    9.     {
    10.         LoginEventArgs loginE = new LoginEventArgs();
    11.         loginE.UserName = TextBox1.Text;
    12.         loginE.Password = TextBox2.Text;
    13.         LoginClick(sender, loginE);
    14.     }
    15. }
    1. public partial class _Default : System.Web.UI.Page 
    2. {
    3.     protected void Page_Load(object sender, EventArgs e)
    4.     {
    5.     }
    6.     protected void Login_Click(object sender, LoginEventArgs e)
    7.     {
    8.         Response.Write("<script>alert('UserName:"+e.UserName+",Password:"+e.Password+"')</script>");
    9.     }
    10. }

      运行结果如图:

  • 相关阅读:
    微信小程序Tab选项卡切换大集合
    微信小程序基于swiper组件的tab切换
    微信小程序基于scroll-view实现锚点定位
    商家 APP 如何接入新版支付宝支付,老版本商家如何升级
    JSON 接口如何实现 RSA 非对称加密与签名
    基于微信小程序的用户列表点赞功能
    tensorflow中常用学习率更新策略
    交叉熵损失函数和均方误差损失函数
    python中几个实用的文件操作
    特征选择
  • 原文地址:https://www.cnblogs.com/hanmos/p/1946978.html
Copyright © 2011-2022 走看看