请教各位高手,我现在在asp.net的工程中有两个用户控件分别为A和B
A控件有二个TextBox,和一个Button
B控件上面有一个A控件的对象,和一个TextBox
我现在有一个WebForm1.aspx窗体调用B控件.这样,在WebForm1界面上同时出现A和B控件上的内容.
问题是,我在B控件里面,怎么来触发A控件的Button事件,触发后,在B控件上的TextBox里面显示A控件两个输入框的内容?希望给出C#的例子!谢谢!

解决方案 »

  1.   

    你同时在触发事件后又要传递那两个文本框的值的话,可能就要自己写个委托了.因为默认的CLICK事件的委托没有参数的
      

  2.   

    好的.期待着xiaowushi0815(小逄)的例子
      

  3.   

    我刚测试下可以通过,你自己建立个用户控件,上面拉两个文本框..再一个按钮,后台代码如下
    Public Class WebUserControl1
        Inherits System.Web.UI.UserControl    Public Delegate Sub RtxtEventHandler(ByVal sender As Object, ByVal e As RtxtEventArgs)
        Public Event RtxtClick As RtxtEventHandler#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
        Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
        '不要删除或移动它。
        Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
            '不要使用代码编辑器修改它。
            InitializeComponent()
        End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
        End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Rtxt()
        End Sub    Public Sub OnRtxtClick(ByVal e As RtxtEventArgs)
            RaiseEvent RtxtClick(Me, e)
        End Sub    Public Sub Rtxt()
            Dim e As RtxtEventArgs = New RtxtEventArgs(TextBox1.Text, TextBox2.Text)
            OnRtxtClick(e)
        End Sub
    End ClassPublic Class RtxtEventArgs
        Inherits EventArgs    Public ReadOnly txtOne, txtTwo As String    Public Sub New(ByVal txtOne As String, ByVal txtTwo As String)
            Me.txtOne = txtOne
            Me.txtTwo = txtTwo
        End Sub
    End Class
      

  4.   

    然后建立个WEBFORM页面.也拉两个文本框.一个按钮(这里随便你,我刚这里也测试了一下).然后还要拉上你刚才的那个用户控件过来,代码如下:
    Public Class WebForm11
        Inherits System.Web.UI.Page#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected WithEvents Button2 As System.Web.UI.WebControls.Button
        Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
        Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
        '不要删除或移动它。
        Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
            '不要使用代码编辑器修改它。
            InitializeComponent()
            AddHandler WebUserControl11.RtxtClick, AddressOf Me.myclick
        End Sub#End Region
        Protected WebUserControl11 As WebUserControl1    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
        End Sub    Public Sub myclick(ByVal sender As Object, ByVal e As RtxtEventArgs)
            Me.TextBox1.Text = e.txtOne
            Me.TextBox2.Text = e.txtTwo
        End Sub    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            WebUserControl11.Rtxt()
        End Sub
    End Class
      

  5.   

    hackate(兰花开香入梦境,独思佳人亦飘然!!) 
    非常谢谢你.但我想要的是C#的例子.
      

  6.   

    哎呀。这么多翻译有点那个啊。.
    http://www.developerfusion.com/utilities/convertcsharptovb.aspx这里你翻译下吧...会有些差别..不过自己看一下应该能够了解的把。
      

  7.   

    用户控件中定义
    public event EventHandler BtnEvent;定义控件中按钮事件
    private void BtnQuery_Click(object sender, System.EventArgs e)
    {
    if (BtnEvent != null)
    {
    BtnEvent(sender,e);
    }
    }
    将你定义的用户控件拖放到你的页面,更改控件名称为UserWebCtrl在你的调用页面的cs代码中加入定义protected BtnTextInputWebCtrl UserWebCtrl;在初始化代码中加入
    override protected void OnInit(EventArgs e)

       .....
       btnTextInputWebCtrl.BtnEvent += new EventHander(this.test);
    }private void test(object sender ,System.EventArgs e)
    {
       //前台你要处理的事件
    }
    通过UserWebCtrl引用用户控件
      

  8.   

    我学过vb.net和java。虽然我没学过c#,但是,asp.net的东西,用c#写的,我也可以看懂。
    不知道你是排斥看vb,还是没学过vb的人,就是看不懂vb的东西。
      

  9.   

    JadyZhu(木独朱) 你写的代码,我已经自己写过一遍了.是不行的
    if (BtnEvent != null)
    {
       BtnEvent(sender,e);
    }
    BtnEvent是为空的,没办法执行BtnEvent(sender,e);
    这句代码
      

  10.   

    我vb.net没有学过,也有些看不懂.所以,要求大家最好用C#.
      

  11.   

    难道只有vb.net可以解决这个问题???
      

  12.   

    A.ascx
    用户A控件中定义
    public event EventHandler BtnEventA;
    public TextBox textBoxA
    定义控件中按钮事件
    private void BtnQuery_Click(object sender, System.EventArgs e)
    {
    if (BtnEventA != null)
    {
    BtnEvent(sender,e);
    }
    }
    B.ascx
    用户B控件中定义
    public event EventHandler BtnEventB;
    public TextBox textBoxB
    定义控件中按钮事件
    private void BtnQuery_Click(object sender, System.EventArgs e)
    {
    if (BtnEventB != null)
    {
    BtnEvent(sender,e);
    }
    }将你定义的用户控件A,B拖放到你的页面,更改控件名称为ACtrl , BCtrl在你的调用页面的cs代码中加入定义protected A ACtrl ;
    protected B BCtrl ;在初始化代码中加入
    override protected void OnInit(EventArgs e)//这段代码是自动生成的,隐藏折叠了的,你要打开添加

       .....
       B.BtnEventB += new EventHnader(this.test);//这个不能少!!!
    }private void test(object sender ,System.EventArgs e)
    {
       ACtrl.textBoxA.text = BCtrl.textBoxB.Text;    
    }