日期:2014-05-18 浏览次数:20797 次
//MyEventArgs.cs的代码
//自定义一个派生自EventArgs的类,封装了按钮上的文本
public class MyEventArgs : EventArgs
{
private string controlName;
public string ControlName
{
get { return controlName; }
}
public MyEventArgs(string controlName)
{
this.controlName = controlName;
}
}
//--------------------------------------
//用户控件1(包含文本框的)代码
public partial class WebUserControl1 : System.Web.UI.UserControl
{
//给该用户控件定义一个属性,用户设置/获取文本框中的内容
public string Content
{
get { return this.TextBox1.Text; }
set { this.TextBox1.Text = value; }
}
}
//----------------------------------------------
//用户控件2(包含按钮的)代码
public partial class WebUserControl2 : System.Web.UI.UserControl
{
public delegate void MyButtonClickHandler(object sender, MyEventArgs e);//定义一个委托,注意这里用的是MyEventArgs
public event MyButtonClickHandler ButtonClick; //给该用户控件定义一个按钮事件
//引发事件的方法
protected virtual void OnButtonClick(MyEventArgs e) //这里也用的是MyEventArgs
{
if (ButtonClick != null) //但订阅器不为空时触发,也就是在客户端订阅了该事件时触发
{
ButtonClick(this, e); //这里实际上调用了委托给客户端的方法
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
//这个是普通的按钮事件调用的函数(也就是说用户控件中一般按钮单击事件触发了整个用户控件的ButtonClick事件)
protected void Button1_Click(object sender, EventArgs e)
{
OnButtonClick(new MyEventArgs(this.Button1.Text)); //触发按钮事件(这里实例化了一个MyEventArgs作为参数,里面附加了所电击的按钮的文本内容)
}
}
//-------------------------------
//default页面代码
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
WebUserControl2_1.ButtonClick += new WebUserControl2.MyButtonClickHandler(ButtonClick); //这里把用户控件2的事件委托给ButtonClick方法
}
//委托给的方法
private void ButtonClick(object sender,MyEventArgs e)
{
WebUserControl1_1.Content = e.ControlName; //这里则把用户控件1中文本框的内容设置为 MyEventArgs实例封装的信息
}
}