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

时间:2014-01-24 06:36:04

标签: c# .net forms visual-studio-2010

IDE:Microsoft Visual Studio 2010 平台:C#.net

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

1 个答案:

答案 0 :(得分:0)

您可以尝试枚举Application.OpenForms中的表单,检查他们的关系并关闭您需要的内容:

// close childs of parentForm
foreach(var form in Application.OpenForms)
    if(form.MDIParent == parentForm)
        form.Close();

或者您可以在创建子项目时注册子项,因此您将拥有要关闭的子项列表(伪代码):

// 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);

这只是一个强大的想法。可以优化Childs注册(通过为孩子们提供自动执行所有操作的基类)。如果您要为每个孩子提供一些额外的数据,例如,存储他们的位置和大小以进行布局,那么注册孩子会更好。