是否关闭C#.net中MDI子窗体和父窗体的所有实例?

是否关闭C#.net中MDI子窗体和父窗体的所有实例?,c#,.net,forms,visual-studio-2010,C#,.net,Forms,Visual Studio 2010,IDE:MicrosoftVisualStudio2010 平台:C#net 我在MDI父窗体上加载了子窗体。因此,现在我想在单击最后一个子窗体中的finish按钮时关闭MDI父窗体及其所有子窗体。一旦我点击finish按钮,它应该关闭父窗体和子窗体的所有实例,并打开另一个不属于MDI父窗体的窗体?您可以尝试在应用程序中枚举窗体。OpenForms,检查它们的关系并关闭您需要的: // close childs of parentForm foreach(var form in Applicat

IDE:MicrosoftVisualStudio2010 平台:C#net


我在MDI父窗体上加载了子窗体。因此,现在我想在单击最后一个子窗体中的finish按钮时关闭MDI父窗体及其所有子窗体。一旦我点击finish按钮,它应该关闭父窗体和子窗体的所有实例,并打开另一个不属于MDI父窗体的窗体?

您可以尝试在
应用程序中枚举窗体。OpenForms
,检查它们的关系并关闭您需要的:

// close childs of parentForm
foreach(var form in Application.OpenForms)
    if(form.MDIParent == parentForm)
        form.Close();
或者,您可以在创建child时注册它们,这样您将有一个要关闭的child列表(伪代码):

//儿童容器
列表_childs=新列表();
//添加新表单时
Form1 Form1=新Form1();
form1.MDIParent=parentForm;
//登记
_childs.Add(表格1);
//关闭子项时取消注册
form.OnClosed+=ChildClosed;
//关着门
//注销者
_删除(发送者作为表单);
这只是一个强有力的想法。Childs的注册可以优化(通过为Childs提供自动完成所有这些的基类)。如果您打算为每个孩子提供一些额外的数据,例如,存储他们的位置和大小以进行布局,那么注册孩子会更好

// container for childs
List<Form> _childs = new List<Form>();
// when adding new form
Form1 form1 = new Form1();
form1.MDIParent = parentForm;
// register it
_childs.Add(form1);
// unregister when child is closed
form.OnClosed += ChildClosed;

// in ChildClosed
// unregiser
_childs.Remove(sender as Form);