Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使内部控件不';t包括主控制';什么事?_C#_Vb.net_Winforms_User Controls - Fatal编程技术网

C# 如何使内部控件不';t包括主控制';什么事?

C# 如何使内部控件不';t包括主控制';什么事?,c#,vb.net,winforms,user-controls,C#,Vb.net,Winforms,User Controls,我有一个UserControl,其中包含一些内部控件。大概是这样的: 现在,当我在我的项目中使用它时,我希望我的控件的每个点在单击时引发相同的单击事件,就像其他控件一样 但问题是:在另一个项目中,我的处理程序只在我单击背景上的某个位置时处理单击事件,而不是在按钮1或标签1上 我可以通过设置内部控件中的每个事件为主控件引发另一个事件来解决此问题,但这有点奇怪 如何使内部控件不覆盖主控件的事件?我建议利用UserControls Load事件来迭代项目中的所有子控件,并以编程方式为每个MouseM

我有一个
UserControl
,其中包含一些内部控件。大概是这样的:

现在,当我在我的项目中使用它时,我希望我的控件的每个点在单击时引发相同的单击事件,就像其他控件一样

但问题是:在另一个项目中,我的处理程序只在我单击背景上的某个位置时处理单击事件,而不是在按钮1或标签1上

我可以通过设置内部控件中的每个事件为主控件引发另一个事件来解决此问题,但这有点奇怪


如何使内部控件不覆盖主控件的事件?

我建议利用
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\u Move
method

我在Delphi中做了类似的事情。诀窍是不添加标签,而是添加标签、按钮等的子类,以调用事件上的父事件


子类只覆盖Click、Move等并调用parent。简单,如果你有很多这样的按钮,可以节省很多时间。

有点奇怪,你会如何触发按钮点击?那么你为什么需要一个按钮呢?@NikolaDavidovic好吧,你可以在整个UC中有一个处理程序用于任何点击,而另一个处理程序只需点击按钮就可以运行。每个事件可以有多个处理程序,因此没有什么可以阻止它。@Servy True,但我希望OP能给出答案,这样他会澄清问题,我们可以提供更好的答案。@Nikola hi,这只是一个例子。我们可以说是一个图片盒和一个标签什么的。。例如,一个控件旁边有一个图标。@Blazi在这种情况下,我想不出比为所有控件的单击事件分配相同的单击处理程序更好的方法。只有每个子控件都执行相同的操作时才是这样,而它们可能不会这样做。@Servy true。。。我能想到的唯一其他方法是深入研究Win32 api并添加消息挂钩。如果.NET没有公开必要的事件,那么除了有效地创建own@DiskJunky谢谢,所以我应该添加每个事件,
MouseMove
MouseClick
Load
,。。。一个接一个,这样吗?@Blazi你想处理的每件事。你到底想做什么?你能解释一下如何重写一个事件吗?类ParentUserControl:UserControl{public override void OnMouseDown(MouseEventArgs e){base.OnMouseDown(e);}}}//你的新控件就是从这个。。。。。。。。。。。。类ParentClickButton:Button{protected override void OnMouseDown(MouseEventArgs-mevent){((ParentUserControl)this.Parent).OnMouseDown(mevent);base.OnMouseDown(mevent);}}}//您的新控件添加了这些按钮而不是按钮……另外,请参阅本文,了解我以前使用过的另一种方法: