C# 从另一个MDIChild窗体显示MDIChild窗体
我有MDIParentForm(Home),子表单(Form1,Form2),Home有一个菜单(Add),Form1有按钮(btnOk) 这是C代码 操作:单击添加菜单时,我用来打开表单1(它工作正常),单击btnOk时,我想打开表单2(它是另一个子表单)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
让我知道我们怎样才能完成这项任务 您要做的是创建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 );
}