日期:2014-05-18 浏览次数:20521 次
//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实例封装的信息 } }