2010-02-11 57 views
0

我的项目是用c#编写的。我有我设计的用户控件。在那个用户控件中,我希望能够通过控件所在的窗体来查看窗体上的所有其他控件。在用户控件中检查包含表单的反射。 C#

我该如何去做这件事?我用反射去通过DLL的,但不是这样的事情。

总结:我的用户控件放置在一个窗体上,我希望我的用户控件能够通过窗体上的所有其他控件进行onLoad查看(有时我想将其限制在同一个容器中,而不是整个窗体,但是我可以计算出以后)。

我也打开想法,不使用反射,如果任何人有任何。

谢谢!

编辑:

所以,我想简单地翻翻父控件和什么IM没有工作要做,这是我的错了严重解释它上面。

让我再提供一些细节。

我知道,在主窗体上会出现一个ContainerListView控制,现在当你添加列的创建的containerlistview ContainerListviewColumnHeaders。它们的声明显示在表单的initalizeComponent()中。我想要做的是在我的用户控件中我想查看表单并找到所有的ContainerListViewColumnHeader,但是因为它们不是'Control'类型(它们是'Component'),所以它们在前面的方法中不显示。 询问Containerlistview不是一个选项。

+0

难道你不能简单地通过'Parent'属性检索父窗体(可能需要订阅'ParentChanged'事件),然后访问此窗体的'Controls'集合? – stakx 2010-02-11 20:37:59

+0

关于您在编辑中提供的其他信息:AFAIK,表单不一定具有对Forms Designer中添加的所有_components_的引用。一些组件是通过引用表单来初始化的,但不是相反的。 – stakx 2010-02-11 20:59:51

+0

因此,使用由Reed提供的方法我认为你可以找到ContainerListView控件,它很可能具有像“Columns”这样的属性,并且每一列都会有类似“Header”的内容。只是一个假设。 – 2010-02-11 21:19:36

回答

5

不需要反思。

请看UserControl.ParentForm - 这是托管UserControl的窗体。从那里,您可以迭代(递归)到Form.Controls

+0

+1 ...打败我几秒钟。 – 2010-02-11 20:37:31

+0

编辑我的描述以提供更多信息 – 2010-02-11 20:53:01