我有一个UserControl
其中包含一些内部控件。是这样的:我如何使内部控制不包括主要控件的事件?
现在,当我在我的项目中使用它,我想每一个点我的控制提出同样的单击事件,如果点击,就像其他控件。
但问题是:我的处理程序在另一个项目,处理点击事件,当我点击背景上的某处,而不是button1或label1。
我可以解决它通过设置内部控件的每个事件引发主控制另一个事件,但它有点奇怪。
如何让内部控件不覆盖主控件的事件?
我有一个UserControl
其中包含一些内部控件。是这样的:我如何使内部控制不包括主要控件的事件?
现在,当我在我的项目中使用它,我想每一个点我的控制提出同样的单击事件,如果点击,就像其他控件。
但问题是:我的处理程序在另一个项目,处理点击事件,当我点击背景上的某处,而不是button1或label1。
我可以解决它通过设置内部控件的每个事件引发主控制另一个事件,但它有点奇怪。
如何让内部控件不覆盖主控件的事件?
我建议借力UserControl
的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
}
而且不要忘了你的用户控件的MouseMove事件挂接到同一Control_Move
方法
我做了这样的事情在Delphi中。诀窍是不添加标签,而是添加标签,按钮等的子类,以调用事件上的父母事件。
子类只是覆盖Click,Move等并调用父类。简单,如果你有很多这样的话,可以节省很多时间。
您能否介绍一下如何重写一个事件? – Blazi 2013-02-26 07:27:23
class ParentUserControl:UserControl {0} {0} public override void OnMouseDown } } //你的新控件源于此............ \t类ParentClickButton:按钮 \t { 保护覆盖无效onmousedown事件(MouseEventArgs mevent) { ((ParentUserControl)this.Parent).OnMouseDown(mevent); base.OnMouseDown(mevent); } \t} //你新的控制增加了这些,而不是按钮... – CharlesW 2013-02-26 15:52:20
另外,看看这个帖子的另一种方法,我以前用过:http://stackoverflow.com/questions/547172/pass-through- mouse-events-to-parent-control – CharlesW 2013-02-26 15:52:40
它有点奇怪,你会怎么触发按钮点击?为什么你需要一个按钮? – 2013-02-25 21:39:58
@NikolaDavidovic那么,你可以有一个处理程序在整个UC内进行任何点击操作,而另一个处理程序在点击按钮时运行。每个事件可以有多个处理程序,所以没有什么可以阻止它。 – Servy 2013-02-25 21:46:27
@Servy True,但我期待OP的回答,这样他就可以澄清问题,我们可以提供更好的答案。 – 2013-02-25 21:51:58