我有一个UserControl
里面包含一些内部控件。像这样的东西:
现在,当我在我的项目中使用它时,我希望我的控件的每个点在单击时都会引发相同的单击事件,就像其他控件一样。
但问题是:我在另一个项目中的处理程序仅在我单击背景上的某个位置时处理单击事件,而不是在 button1 或 label1 上。
我可以通过设置内部控件中的每个事件为主控件引发另一个事件来解决它,但这有点奇怪。
如何使内部控件不覆盖主控件的事件?
我有一个UserControl
里面包含一些内部控件。像这样的东西:
现在,当我在我的项目中使用它时,我希望我的控件的每个点在单击时都会引发相同的单击事件,就像其他控件一样。
但问题是:我在另一个项目中的处理程序仅在我单击背景上的某个位置时处理单击事件,而不是在 button1 或 label1 上。
我可以通过设置内部控件中的每个事件为主控件引发另一个事件来解决它,但这有点奇怪。
如何使内部控件不覆盖主控件的事件?
我建议利用UserControl
s Load 事件来遍历项目中的所有子控件,并以编程方式为每个 MouseMoved 事件添加一个处理程序。这将足够强大以处理添加的任何新子控件。例如;
private void UserControl1_Load(object sender, EventArgs e)
{
foreach (Control c in Controls)
{
c.MouseMove += Control_Move;
}
}
protected void Control_Move(object sender, MouseEventArgs e)
{
// do stuff here
}
并且不要忘记将 UserControl 的 MouseMove 事件与相同的Control_Move
方法挂钩
我在德尔福做过这样的事情。诀窍是不添加标签,而是添加标签、按钮等的子类,以调用事件的父事件。
子类只是覆盖 Click、Move 等并调用父类。简单,如果你有很多这些,可以节省很多时间。