![]() |
1
27
[重要的是要理解下面的ISite技术仅在设计时有效。因为ContainerControl是公共的,并且被分配了一个值,VisualStudio将编写初始化代码,在运行时对其进行设置。Site是在运行时设置的,但您无法从中获取ContainerControl] Here's an article 它描述了如何为非视觉组件执行此操作。 基本上,您需要向组件添加一个属性ContainerControl:
并覆盖Site属性:
如果这样做,ContainerControl将被初始化为由设计器引用包含表单。链接文章对此进行了更详细的解释。 了解如何做事的一个好方法是查看中Types的实现。NET Framework,其行为与您使用Lutz Reflector等工具所期望的行为相似。在这种情况下,系统。窗户。形式。ErrorProvider是一个很好的例子:一个需要知道其包含形式的组件。 |
![]() |
2
9
我使用递归调用来向上遍历控制链。将此添加到您的控件中。
编辑: 我看到你在我打字的时候修改了你的问题。如果它是一个组件,则该组件的构造函数应将其父级作为参数,并且父级在构造时应传递this。其他几个组件也可以做到这一点,比如定时器。 将父控件另存为成员,然后在我上面给你的ParentForm属性中使用它,而不是这个。 |
![]() |
3
3
您必须以某种方式设置父容器。你的组件只是一个类,它和其他东西一样驻留在内存中。除非有什么东西告诉你它创造了它,否则它没有真正的背景。创建父控件属性并对其进行设置。 或者简单地从控件派生并使用FindForm()。并非所有控件都必须有可见的组件 |
![]() |
4
2
如果组件集正在管理其他视觉控件,那么您应该能够通过它们到达父级。 |
![]() |
5
2
我发现了 this solution 其不需要输入。对于C#,我是这样实现的:
这种方式允许用户设置ParentForm,但父窗体将其设置为默认值。 我希望这对你有帮助。 |
![]() |
6
2
试试这个。...
呼叫
|
![]() |
7
1
我认为您想使用IComponent的Site属性。它或多或少相当于父属性。 |
![]() |
8
1
上述改进是:
|
![]() |
9
-2
如果组件相关
|
![]() |
10
-3
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 7 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 7 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 7 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 8 月前 |