如何将 winform 子窗体动态嵌入到主 winform 的选项卡控件中

本文关键字:winform 选项 控件 窗体 动态 | 更新日期: 2023-09-27 17:57:03

有没有办法将 Winforms 表单对象交给包含选项卡控件的主窗体,并让主窗体将此表单对象加载到其中一个选项卡中?

另一个问题:表单对象将从与主表单不同的线程实例化。

如何将 winform 子窗体动态嵌入到主 winform 的选项卡控件中

我认为在不同的线程上创建窗体时它不起作用,但您通常会通过将窗体的 TopLevel 属性设置为 False 然后将其添加到选项卡页控件(或任何其他父控件)来执行此操作。

编辑:您还需要将"可见"属性设置为 True,因为默认情况下窗体处于隐藏状态。

另外,我刚刚尝试了这个,它确实适用于从另一个线程创建的按钮之类的东西。但是当我使用表单执行此操作时,我得到了一个无效操作异常。

您想要多

文档界面 (MDI) 标签页浏览之类的内容吗?

您应该能够从TabPage上的Controls集合中调用Add。您可能希望相应地设置AnchorDock属性,以便控件填充整个图面(假设这是您想要的)。

不过,我认为从另一个线程创建控件不是一个好的途径。我相信您完全有能力在使用适当的同步机制等方面使这种交接线程安全。但是,所有 UI 元素都具有线程相关性,这意味着一旦创建了该 UI 元素,它就属于创建线程。简单地创建(只是一个构造函数调用)可能没有任何问题,但我采用将所有 UI 元素逻辑保留在 UI 线程上的规则,非常字面和严格。