我有一个名为GameButton的用户控件,里面有一个标签。当我将用户控件添加到我的表单并向其添加单击事件时,当您单击自定义按钮的背景而不是标签中的文本时会触发它?如果不在用户控件代码中添加一堆点击事件,我该如何解决这个问题呢?
编辑:UI框架:winforms
答案 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);
}
这将引发主控件(或用户控件)事件。