我有一个mdi表单,还有很多与菜单条相关联的其他表单。当我点击任何其他菜单项时,应该在mdi父表单中关闭先前打开的表单。
答案 0 :(得分:3)
这是一种更简洁,现代和外科的方式来关闭所有MdiChild表格:
static void CloseAllMdiChildForms()
{
foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // ToArray necessary to build a snapshot
form.Close();
}
然而,听起来你想要的是在任何给定时间只打开一个子表单。如果是这种情况,MDI不是正确的工具。您可以构建UserControl
并将其交换进主申请表格。
答案 1 :(得分:1)
如果要打开新表单,请调用此方法:
private void CloseAllForms()
{
Form[] formToClose = null;
int i = 1;
foreach (Form form in Application.OpenForms)
{
if (form != this) //this is form1
{
Array.Resize(ref formToClose, i);
formToClose[i - 1] = form;
i++;
}
}
if (formToClose != null)
for (int j = 0; j < formToClose.Length; j++)
formToClose[j].Dispose();
}
米蒂亚
答案 2 :(得分:0)
这是最好的一个:
static void CloseAllMdiChildForms()
{
foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // The ToArray is necessary to build a snapshot
form.Close();
}