我写了一个用户控件(UserControl),
例如类名为A。在窗口上画了此控件,名为a。
创建了a的Click事件。
当程序运行时,单击a控件时并没有触发a的Click事件。经过调查后发现,
a的Click事件只有单击A本身(并非A中的子控件)才会触发。
所以,
我在  A中的所有在上层的子控件的所有Click事件中  都重新触发一次A的Click事件
才解决此问题。现在问题是:
有没有其它简单的方法来解决此问题?
(除了用循环A中所有子控件动态的注册其Click事件)

解决方案 »

  1.   

    自定义单机事件吧,这样所有控件的点击都去触发那个事件http://www.cnblogs.com/greatverve/archive/2012/02/15/csharp-usercontrol-event.html
      

  2.   

    没遇到你的问题啊,亲
    如图:我在UserControl中,分别响应两个button的click事件: private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Button1");
            }        private void button2_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Button2");
            }
    然后在引用该控件的Form中,响应该控件的click事件(也就是说整个控件的单击事件):
    private void userControl11_Click(object sender, EventArgs e)
            {
                MessageBox.Show("main");
            }ok,说完了,点击按钮分别弹出“Button1”和“Button2”,点击橙色区域弹出“main”。
    没有你说的那个问题呀
      

  3.   


    楼主以为点击Button1时“应该弹出main”!
      

  4.   

    首先谢谢大家的回复。
    关于我这个问题我可能没有说明白。
    补充说明:
    1、单击分两种,一种是单击UserControl本身,一种是单击UserControl中的某个子控件。
       当单击UserControl中的子控件时不会触发UserControl本身的单击事件。
    2、我的UserControl中有N个子控件,所有的控件已经把UserControl本身填充满了,UserControl本身已经看不到了,所以不可能触发UserControl本身的单击事件。由于UserControl在窗口中是一个单独的控件,无论单击此控件的哪个位置,都应该触发该控件单击事件。
    哪怕单击UserControl中的一个控钮,该按钮的单击事件和UserControl本身的单击事件都要触发。
    这个两个单击事件我都已经实现了,只不过我的写法可能有点多(写法请参照我上面说的问题)。
    我只想问有没有更简单的写法?
    (我不是害怕麻烦,而是想学习.Net中有没有已经实现的方案)
      

  5.   

    我的代码是:''''UserControl
    '定义单击事件
    Public Shadows Event Click(ByVal sender As Object, ByVal e As ShapeLayerItemEventArgs)'单击所有的控件时,触发已定义的Click事件(※1)
    Private Sub AllContorl_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles pnlLeft.Click, pnlInfo.Click, pnlTools.Click, picPreview.Click, lblText.Click, btnUp.Click, btnDown.Click    RaiseEvent Click(Me, New ShapeLayerItemEventArgs(Me.Name, _shapeID, lblText.Text))End Sub''''Form
    'UserControl的Click事件
    Private Sub ShapeLayerItem_Click(ByVal sender As Object, ByVal e As ShapeLayerItemEventArgs)    ......End Sub在※1处,注册了UserControl中所有子控件的Click事件,虽然可以用UserControl的Controls属性来循环所有的控件进行动态注册,但总感觉不是很好,不知道.Net中有没有已经实现的功能。
    请教大家。
      

  6.   

    按钮在容器中的时候,默认按钮的事件就会优先触发的,按钮放到panel中试一试
      

  7.   

    这个问题在winform中只能通过代码去控制了,不像wpf有了起泡事件
      

  8.   

    所有自控件全部放在一个Panel里,然后设置Panel的Enable = false,试试