【发布时间】:2011-05-19 15:08:46
【问题描述】:
有没有一种方法可以将 Winforms 表单对象交给包含选项卡控件的主表单,并让主表单将此表单对象加载到其中一个选项卡中?
另一个问题:表单对象将从不同于主表单的线程实例化。
【问题讨论】:
标签: c# winforms multithreading tabcontrol subforms
有没有一种方法可以将 Winforms 表单对象交给包含选项卡控件的主表单,并让主表单将此表单对象加载到其中一个选项卡中?
另一个问题:表单对象将从不同于主表单的线程实例化。
【问题讨论】:
标签: c# winforms multithreading tabcontrol subforms
我认为在不同线程上创建表单时它不会起作用,但您通常可以通过将表单的 TopLevel 属性设置为 False 然后将其添加到选项卡页控件(或任何其他父控件)来执行此操作.
编辑:您还需要将 Visible 属性设置为 True,因为默认情况下表单是隐藏的。
另外,我刚刚尝试过,它确实适用于从另一个线程创建的按钮之类的东西。但是当我使用表单执行此操作时,我得到了一个 InvalidOperationException。
【讨论】:
【讨论】:
您应该可以从TabPage 的Controls 集合中调用Add。您可能需要相应地设置 Anchor 和 Dock 属性,以便控件填充整个表面(假设这是您想要的)。
我不认为从另一个线程创建控件是一个好方法。我敢肯定,只要使用适当的同步机制等,您就完全有能力使这种切换线程安全。但是,所有 UI 元素都具有线程关联性,这意味着一旦创建了 UI 元素,它就属于创建线程。简单地创建(只是一个构造函数调用)可能没有任何问题,但我采取的规则是在 UI 线程上保持 all UI 元素逻辑非常严格。
【讨论】: