MDI子窗体使用相同的父窗体相互打开

本文关键字:窗体 MDI | 更新日期: 2023-09-27 18:03:28

我有3个表单,分别叫它们Form1, Form2和Form3。我已经为Form1发送了IsMDIParent属性为true。

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

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

这很好。然后我要做的是点击第二个表单中的一个按钮,关闭Form2并打开Form3,作为Form1的子表单。

我试着

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

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

我必须总是从父窗体启动子窗体吗?如果是这样,当它在子窗体上的button click事件上时,我该怎么做呢?

MDI子窗体使用相同的父窗体相互打开

就用这个。MdiParent,而不是Form1,比如

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

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

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

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

当你想在另一个表单中打开一个新表单时,你可以这样做(例如在ChildFormOne with button中):

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

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