在自定义用户控件中,我们经常要添加自定义的事件,这时就要使用到委托(delegate)了。
在做开发中,经常都要用到登录。那么,我们就把登录的界面做成一个控件,以后再使用它就方便多了。
在自定义用户控件中,我们经常要添加自定义的事件,这时就要使用到委托(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>");
}
}
运行结果如图: