【问题标题】:Show a Winform 'Form' as if it were a usercontrol, within another form在另一个表单中显示一个 Winform“表单”,就好像它是一个用户控件一样
【发布时间】:2014-01-24 15:29:10
【问题描述】:

编辑

This Question 的答案虽然是一个明显的解决方案,但对于这种情况来说是不够的。我在最初的问题中加粗了原因,解释了为什么我希望它“从字面上回答” - 感谢 LarsTech!

我原来的问题:

我有一个包含 100 个 Form 屏幕的库,其中 'Beyond My Control' 我可以在我的应用程序中分享一些。但是,我的应用使用选项卡控件,我需要表单的内容显示在选项卡中,而不是弹出窗口。

当我尝试新建一个表单并将其添加到选项卡的控件集合中时,我收到以下错误消息:

无法将顶级控件添加到控件中。

有人知道如何解决这个问题吗?我知道还有其他涉及更好架构的方法,但最后期限、积压和丰富的新客户等待着。 [叹气/]

private void button1_Click(object sender, EventArgs e)
{
  //panel1.Controls.Add(new Button());
  Form f = new Form();
  f.Controls.Add(new CheckBox());
  //f.ShowDialog();
  panel1.Controls.Add(f);
}

【问题讨论】:

  • 将现有表单转换为用户控件,并在原始表单中包含该用户控件,然后在您的选项卡控件中包含该用户控件会非常快。这将允许您“即时”转换表单,而不必一次更改所有内容。
  • Parent a form to a panel的可能重复
  • 感谢您的输入...但我无法更改它们,不想复制它们,并想分享它们。很好的建议,但在大多数情况下,这就是答案。

标签: c# .net vb.net winforms


【解决方案1】:

尝试关闭 TopLevel:

f.TopLevel = false;
f.FormBorderStyle = FormBorderStyle.None;
f.Visiible = true;

现在它本质上是一个用户控件。不过请注意,因为它是一个表单,它会出现在 Application.OpenForms 集合中,这可能不是您的本意。

【讨论】:

  • 请注意Application.OpenForms。可以通过添加f.TopLevel检查来处理..
【解决方案2】:

您需要将表单的TopLevel 属性设置为false,如下所示:

f.TopLevel = false;

您可能还想将FormBorderStyle 属性设置为None

f.FormBorderStyle = FormBorderStyle.None;

正如上面的 cmets 所述,如果可能,最好将其设为 UserControl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多