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