C# 从另一个MDIChild窗体显示MDIChild窗体

C# 从另一个MDIChild窗体显示MDIChild窗体,c#,windows-forms-designer,mdichild,mdiparent,C#,Windows Forms Designer,Mdichild,Mdiparent,我有MDIParentForm(Home),子表单(Form1,Form2),Home有一个菜单(Add),Form1有按钮(btnOk) 这是C代码 操作:单击添加菜单时,我用来打开表单1(它工作正常),单击btnOk时,我想打开表单2(它是另一个子表单) 让我知道我们怎样才能完成这项任务 您要做的是创建MDI父对象的另一个实例,并将Form2设置为新创建的MDI父对象的子对象。这显然是错误的,你希望双方都是同一个父母的孩子 或者直接这样做: private void btnDone_Clic

我有MDIParentForm(Home)子表单(Form1,Form2)Home有一个菜单(Add)Form1按钮(btnOk)

这是C代码

操作:单击添加菜单时,我用来打开表单1(它工作正常),单击btnOk时,我想打开表单2(它是另一个子表单)


让我知道我们怎样才能完成这项任务

您要做的是创建MDI父对象的另一个实例,并将
Form2
设置为新创建的MDI父对象的子对象。这显然是错误的,你希望双方都是同一个父母的孩子

或者直接这样做:

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中设置的.MDIParent,并确保新创建的form2使用相同的实例。

感谢Wiktor Zychla,我得到了解决方案,正如您在第二次演示中所示。但我有第二种情况,From1显示在正常窗口(不是MdiChild)中,并且从正常窗口添加新的MdiChild。这是我的代码..public partial class Home:DevExpress.xtrabar.Ribbon.Ribbon表单{private void btnAddForm\u ItemClick(对象发送者,DevExpress.xtrabar.ItemClickEventArgs e){Form1 frm=new Form1();//CreateForm((frm));frm.Show();}}public partial class Form1:Form{private void btnDone\u Click(objectsender,EventArgs e){Form2 frm=new Form2();((Home)this.MDIParent).CreateForm(frm);//这里我得到了空引用异常。}}}}为这种情况创建一个新问题,并在这里添加注释让我知道。
private void btnDone_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    ((Home)this.MDIParent).CreateForm( frm );
}