我有一个名为GameButton的用户控件,里面有一个标签。当我将用户控件添加到表单并为其添加单击事件时,它会在您单击自定义按钮的背景时触发,而不是标签中的文本?我如何解决这个问题,而不在用户控件代码中添加一堆点击事件?单击控件内部的文本时,用户控件点击事件不起作用?
编辑:UI框架:的WinForms
我有一个名为GameButton的用户控件,里面有一个标签。当我将用户控件添加到表单并为其添加单击事件时,它会在您单击自定义按钮的背景时触发,而不是标签中的文本?我如何解决这个问题,而不在用户控件代码中添加一堆点击事件?单击控件内部的文本时,用户控件点击事件不起作用?
编辑:UI框架:的WinForms
如果我正确理解你,你GameButton用户控件,当点击,而不是当点击该标签会触发事件 - 而您想要。这是因为标签(一个控件)位于背景之上。因此,您还需要使用点击事件注册您的标签。这可以在设计器中手动完成,也可以通过编程为页面上的每个控件完成。
如果你想要做的用户控件的每个控件,把这个到用户控件的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
}
编辑:最好的办法是创建单击用户控件中的事件处理程序属性。这样,每次向用户控件添加/删除单击事件时,都会自动将其添加/删除到用户控件中的所有控件。
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:
希望这有助于!
让您的标签的“启用”属性“假,那么鼠标事件将在用户控制工作。
UI框架(的WinForms,WPF,Web表单,MVC)? – 2012-03-13 01:15:17
对不起,WinForms的 – Oztaco 2012-03-13 01:15:37
也请避免包括标签(例如visual-studio) – 2012-03-13 01:16:05