日期:2014-05-18  浏览次数:20461 次

50分 求解!发了好几天帖子 竟然没有好办法
问题:
建立两个用户控件 在第一个用户控件里面 放一个 文本框控件,在第二个用户控件里面放一个按钮, 然后把两个用户控件托方到 首页上!

结果:
在首页上点击 第二个用户控件的按钮 让第一个控件的文本框 显示一句话 (随便什么都行,要得是过程)

注意:不要用客户端代码,只要求用服务器端代码,用事件委托也行,用其他的办法也可以,只要达到效果! ***** 要求要服务器端代码*******

解决办法 过程要详细! 麻烦各位了,我都发了好几天帖子了!压抑!

------解决方案--------------------
C# code

//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实例封装的信息
    }
}