单击控件内的文本时,用户控件单击事件不起作用?

时间:2012-03-13 01:13:19

标签: c# winforms events onclick mouse

我有一个名为GameButton的用户控件,里面有一个标签。当我将用户控件添加到我的表单并向其添加单击事件时,当您单击自定义按钮的背景而不是标签中的文本时会触发它?如果不在用户控件代码中添加一堆点击事件,我该如何解决这个问题呢?

编辑:UI框架:winforms

3 个答案:

答案 0 :(得分:11)

如果我理解正确,您的GameButton用户控件将在单击时触发事件,但不会在单击标签时触发 - 并且您需要两者。这是因为标签(控件)位于背景之上。因此,您还需要使用click事件注册您的标签。这可以在设计器中手动完成,也可以以编程方式为页面上的每个控件完成。

如果你想在UserControl中做每一个控件,把它放到UserControl的OnLoad事件中,你就可以为每个控件使用相同的click事件:

foreach(Control c in this.Controls){
    c.Click += new EventHandler(yourEvent_handler_click);
}

public void yourEvent_handler_click (object sender, EventArgs e){
    //whatever you want your event handler to do
}

编辑:最好的方法是在用户控件中创建click事件处理程序属性。这样,每次向用户控件添加/删除单击事件时,它都会自动将其添加/删除到用户控件中的所有控件。

public new event EventHandler Click {
        add {
            base.Click += value;
            foreach (Control control in Controls) {
                control.Click += value;
            }
        }
        remove {
            base.Click -= value;
            foreach (Control control in Controls) {
                control.Click -= value;
            }
        }
    }

这是另一个post

希望这有帮助!

答案 1 :(得分:1)

使标签的“启用”属性“为假,然后鼠标事件将在用户控制中起作用。

答案 2 :(得分:1)

您可以创建一个新方法并将所有控件分配给它

private void Control_Click(object sender, EventArgs e)
{
   this.OnClick(e);
}

这将引发主控件(或用户控件)事件。