C# 如何在表单中打开表单?

C# 如何在表单中打开表单?,c#,winforms,C#,Winforms,我有一个父窗体,我喜欢在父窗体中打开一个子窗体 这能做到吗?如果是,请回复我的样本代码 谢谢 通知子窗体其父窗体是当前窗体 private void button1_Click(object sender, EventArgs e) { this.IsMdiContainer = true; Form Form2 = new Form(); Form2.MdiParent = this;

我有一个父窗体,我喜欢在父窗体中打开一个子窗体

这能做到吗?如果是,请回复我的样本代码


谢谢

通知子窗体其父窗体是当前窗体

private void button1_Click(object sender, EventArgs e)
        {
            this.IsMdiContainer = true;
            Form Form2 = new Form();
            Form2.MdiParent = this;
            Form2.Show();
        }
计量吸入器:

模式对话框:

var form = new Form1();
form.Parent = this;
form.ShowDialog();
MDI子对象:

var newMDIChild = new Form1();
newMDIChild.MdiParent = this;
newMDIChild.Show();

这取决于你所说的“形式内”是什么意思。如果需要将子窗体显示为父窗体的控件,我想您可以尝试
ParentForm.Controls.Add(new ChildForm())
。或者甚至可以通过再次使用包含控件的
控件
集合,将子窗体放置在父窗体的现有容器中


在父窗体中编写这些代码行并进行检查。

以下是执行所需操作的代码:

假设button1是父窗体

private void button1_Click(object sender, EventArgs e)
        {
            this.IsMdiContainer = true;
            Form Form2 = new Form();
            Form2.MdiParent = this;
            Form2.Show();
        }
此外,以下链接将为您提供更多有关您想要做什么的详细信息:

希望这能有所帮助……

我注意到这里的所有答案都假设OP打算使用MDI表单体系结构,尽管这从未明确说明

还有另一种方法可以使一个窗体成为另一个窗体的“子窗体”:只需将其“TopLevel属性”设置为“False”,然后将其“Parent属性”设置为另一个窗体

Form2 f2 = new Form2();
f2.TopLevel = false;
f2.Parent = someOtherForm;
f2.Show();
顺便说一句,我认为“表单中的表单”的整个想法是一个坏主意,,MDI体系结构现在理所当然地遭到了微软的反对

我认为,更好的做法是让二级表单的属性为私有,如果表单中必须有其他容器,请使用用户控件、面板等

var childform = new  form2();
childform.TopLevel=false;
this.Controls.add(childform);
childform.Show();

这对我很有用。

您的意思是只使用childform.ShowDialog()打开子窗体,还是在父窗体中追加或放置一个childform???@dia我喜欢将childform放置在父窗体中。如果可以,请用示例代码回复。我为您的要求添加了答案…对于模态对话框,我在窗体上遇到了一个错误。Parent=此,但能够执行窗体。ShowDialog(此)这是一个很好的答案,尤其是当有人正在显示和隐藏多个面板控件时。我喜欢这个!如果尝试执行此操作,将出现异常:
System.ArgumentException:“无法将顶级控件添加到控件中。”
var childform = new  form2();
childform.TopLevel=false;
this.Controls.add(childform);
childform.Show();