C# MDI父窗体设置父窗体时出现问题
我使用的是一个MDI父窗体,它有一个child,当这个父窗体调用它们时,它们显示得非常好,我使用它来强化子窗体C# MDI父窗体设置父窗体时出现问题,c#,visual-studio-2010,mdichild,mdiparent,C#,Visual Studio 2010,Mdichild,Mdiparent,我使用的是一个MDI父窗体,它有一个child,当这个父窗体调用它们时,它们显示得非常好,我使用它来强化子窗体 ChildForm child = new ChildForm(); child.IsMdiContainer= this; child.Show(); 从父控件调用它们时效果很好,但如果我从不是任何父窗体的子窗体的另一个窗体调用它们,则它们不再是主父窗体的子窗体。一个明显的原因是,当我在该独立窗体上强化它们时,我根本无法使用child.mdiprent=此;因为这会使我从父母那里独
ChildForm child = new ChildForm();
child.IsMdiContainer= this;
child.Show();
从父控件调用它们时效果很好,但如果我从不是任何父窗体的子窗体的另一个窗体调用它们,则它们不再是主父窗体的子窗体。一个明显的原因是,当我在该独立窗体上强化它们时,我根本无法使用child.mdiprent=此;因为这会使我从父母那里独立出来,但我也尝试过
MDIParentForm form = new MDIParentForm
ChildForm child = new ChildForm();
child.IsMdiContainer= form ;
child.Show();
但这也没有帮助,相反,它引发了一个异常,即我试图设置父级的表单不是MDI容器,然后对此我进行了尝试和修改
MDIParentForm form = new MDIParentForm ;
form.IsMdiContainer= true;
ChildForm child = new ChildForm();
child.MDIParent = form ;
child.Show();
结果什么也没有出现
任何关于如何………的想法都应该将父级设置为已经存在的mdiform,而不是创建新mdiform 如果还没有mdiform的实例,您不仅应该创建该表单的实例,还应该显示它
var mdiForm = new MdiForm();
mdiForm.IsMdiContainer = true;
var childForm = new ChildForm();
childForm.MdiParent = mdiForm;
mdiForm.Show();
childForm.Show();
还请注意,我使用了
mdiForm.IsMdiContainer
,因为这里没有IsMdiParent
属性。要从另一个子级创建子级,只需这样编写:
ChildForm sibling = new ChildForm();
sibling.MdiParent = this.MdiParent;
sibling.Show();
或者触发父级可以响应的自定义事件。在父级窗体中编写此代码
childform obj = new childform( );
obj.MdiParent = this;
obj.StartPosition = FormStartPosition.CenterScreen;
obj.Show( );
是的,我在属性名称上出错。我试图执行您的代码,但没有帮助我。相反,它显示了一个新窗体对话框,其中包含双控件框。我的代码显示了一个新窗体,因为该代码创建了MdiForm的新实例。如果MdiForm的实例已存在,则应将父属性设置为已存在的MdiForm,就像我在第一句中说的。好吧,这很好,但是如果你要给孩子打电话的表单没有任何家长呢?让我们说,从家长那里有一个弹出消息,它不是该表单的孩子,那么应该采用什么方案呢。通过表单的构造函数传递对父级的引用是一种显而易见的方法。甚至Application.OpenForms[0]也可以工作。或者给父对象一个静态属性,则应该只有一个MDI父对象。让父母照顾孩子是最好的办法。我提到的那个定制活动。或者ShowDialog()返回值。Hi@Obeng您能为您的答案添加一些解释吗?
class MainClass
{
public string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
public void showWindow(Form openWin, Form closeWin, Form MDI)
{
closeWin.Close();
openWin.WindowState = FormWindowState.Minimized;
openWin.MdiParent = MDI;
openWin.Show();
}
}