MDI子表单使用相同的父表单互相打开

时间:2014-05-14 08:33:23

标签: c# forms mdi

所以我有3个表单,我们称之为Form1,Form2和Form3。 我已经将FormM的IsMDIParent属性发送为true。

当我启动应用程序时,它使用

将Form2加载为MDI子项
Form2 frm = new Form2();
frm.MdiParent = this;
frm.Show();

这很好用。我当时想要做的是单击一个带有第二个表单的按钮,它将关闭Form2并打开Form3作为Form1的子表单。

我试过

SecondForm SecondFormMDI = new SecondForm();
SecondFormMDI.MdiParent = Form1;
SecondFormMDI.Show();

在Form2中的按钮单击事件,但它不起作用。

我是否必须始终从父表单启动子表单?如果是这样,当它出现在子表单上的按钮点击事件时,我该怎么做呢?

4 个答案:

答案 0 :(得分:1)

只需使用this.MdiParent,而不是Form1,如

    SecondForm SecondFormMDI = new SecondForm();
    SecondFormMDI.MdiParent = this.MdiParent;
    SecondFormMDI.Show();

答案 1 :(得分:0)

您可以在设计时设置任何表单的MDIParent,为什么在运行时? 只需将Form2和Form3的MDIParent属性值设置为Form1即可。

答案 2 :(得分:0)

您可以在MDIForm中创建一个方法来打开子窗体:

public void OpenForm(Form form)
{
    form.MdiParent = this;
    form.Show();
}

如果要以其他形式打开新表单,可以执行以下操作(使用按钮的ChildFormOne示例):

private void btnOpenChildFormTwo_Click(object sender, EventArgs e)
{
    ((MDIForm)this.MdiParent).OpenForm(new ChildFormTwo());
    this.Close();
}

希望这有帮助。

答案 3 :(得分:0)

ChildForm frmChild = new ChildForm();
frmChild.MdiParent = this.MdiParent;
frmChild.Dock = DockStyle.Fill();
frmChild.Show();