在另一个表单中显示Winform“表单”,就像它是用户控件一样

时间:2014-01-24 15:29:11

标签: c# .net vb.net winforms

修改

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

我原来的问题:

我有一个包含100个WinForms 表单屏幕的库,其中包含'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);
}

2 个答案:

答案 0 :(得分:5)

尝试关闭TopLevel:

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

现在基本上是一个UserControl。但请注意,因为它是一个表单,它会显示在Application.OpenForms集合中,这可能不是您的意图。

答案 1 :(得分:2)

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

f.TopLevel = false;

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

f.FormBorderStyle = FormBorderStyle.None;

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