【发布时间】:2011-03-26 12:24:26
【问题描述】:
我有一个 mdi 表单,并且有很多其他表单与菜单条链接。当我单击任何其他菜单项时,mdi 父表单内应该有关闭以前打开的表单。
【问题讨论】:
标签: c#
我有一个 mdi 表单,并且有很多其他表单与菜单条链接。当我单击任何其他菜单项时,mdi 父表单内应该有关闭以前打开的表单。
【问题讨论】:
标签: c#
这是关闭所有 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 就不是适合这项工作的工具。您可以构建 UserControls 并将它们交换到您的主应用程序表单中。
【讨论】:
当你想打开一个新表单时调用这个方法:
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();
}
米加
【讨论】:
Array.Resize 真的吗?使用动态大小的容器,例如 List<Form>。
这是最好的:
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();
}
【讨论】: