如何动态地将winform子表单嵌入到主winform的选项卡控件中?

时间:2011-05-19 15:08:47

标签: c# winforms multithreading tabcontrol subforms

有没有办法可以将Winforms表单对象传递给包含制表符控件的主窗体,并让主窗体将此窗体对象加载到其中一个制表符中?

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

3 个答案:

答案 0 :(得分:4)

我不认为在不同的线程上创建Forms时它会起作用,但是你通常会通过将Form的TopLevel属性设置为False然后将其添加到tab页面控件(或任何其他父控件)来实现这一点。

编辑:您还需要将Visible属性设置为True,因为默认情况下会隐藏表单。

另外,我只是试过这个,它确实适用于从另一个线程创建的按钮。但是当我使用Form执行它时,我得到了一个InvalidOperationException。

答案 1 :(得分:3)

你想要Multi Document Interface (MDI) tab page browsing之类的东西吗?

答案 2 :(得分:2)

您应该可以从Add上的Controls集合中致电TabPage。您可能需要相应地设置AnchorDock属性,以便控件填满整个表面(假设这是您想要的)。

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