从另一个 MDI 子窗体显示 MDI 子窗体

Show MDIChild Form from another MDIChild Form

让我有 MDIParentForm (Home), Child Form (Form1, Form2), Home有一个菜单(添加)Form1按钮(btnOk)

'''''Here is C# Code''''''

 public partial class Home : DevExpress.XtraBars.Ribbon.RibbonForm
{
    public Home()
    {
        InitializeComponent();
    }
    public void  CreateForm(Form frm)
    {
        frm.MdiParent = this;
        frm.WindowState = FormWindowState.Maximized;
        frm.Show();
    }
    private void btnAddForm_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
    {
        Form1 frm = new Form1();
        CreateForm(frm);
    }
}
//Up to this 1st level my code works fine.
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void btnDone_Click(object sender, EventArgs e)
    {
//From Here I am not able show the Form2.
        Home MDIParentForm = new Home();
        Form2 frm = new Form2();
        MDIParentForm.CreateForm(childForm);
    }
}

操作:单击 Add 菜单我曾经打开 Form1(它工作正常)并单击 btnOk 我想打开 Form2(这是另一个 MDIChild 窗体)。

让我知道我们如何完成这项任务。

您所做的是创建另一个 MDI parent 实例,并将 Form2 设置为这个新创建的 MDI parent 的 child。这显然是错误的,您希望两者都是 children of the very same parent.

要么直接这样做:

private void btnDone_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    // both have the same MDI parent
    frm.MDIParent = this.MDIParent;
    frm.Show();
}

或者,如果您坚持要重复使用您的 CreateForm

private void btnDone_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    ((Home)this.MDIParent).CreateForm( frm );
}

这两种方法都依赖于在 form1 中设置的 this.MDIParent 并确保相同的实例用于新创建的 form2。