C# 单击打开任何其他表单时,从mdi父级关闭表单

C# 单击打开任何其他表单时,从mdi父级关闭表单,c#,C#,我有一个mdi表单,还有很多其他表单与菜单条链接。当我单击任何其他菜单项时,mdi父窗体中应该有“关闭以前打开的窗体”。如果要打开新窗体,请调用此方法: private void CloseAllForms() { Form[] formToClose = null; int i = 1; foreach (Form form in Application.OpenForms) { if (form != this) //this is form1

我有一个mdi表单,还有很多其他表单与菜单条链接。当我单击任何其他菜单项时,mdi父窗体中应该有“关闭以前打开的窗体”。

如果要打开新窗体,请调用此方法:

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();
}
private void CloseAllForms()
{
Form[]formToClose=null;
int i=1;
foreach(Application.OpenForms中的表单)
{
if(form!=this)//这是form1
{
调整数组大小(参考formToClose,i);
formToClose[i-1]=形式;
i++;
}
}
如果(formToClose!=null)
for(int j=0;j

Mitja

当您要打开新表单时,调用此方法:

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();
}
private void CloseAllForms()
{
Form[]formToClose=null;
int i=1;
foreach(Application.OpenForms中的表单)
{
if(form!=this)//这是form1
{
调整数组大小(参考formToClose,i);
formToClose[i-1]=形式;
i++;
}
}
如果(formToClose!=null)
for(int j=0;j

Mitja

这里有一种更简洁、更现代、更外科的方法来关闭所有MDI子窗体:

static void CloseAllMdiChildForms()
{
    foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // ToArray necessary to build a snapshot
        form.Close();
}
静态void CloseAllMdiChildForms()
{
foreach(Application.OpenForms.Cast()中的var form.Where(f=>f.ismdhild.ToArray())//构建快照所需的ToArray
form.Close();
}

不过,听起来您希望在任何给定时间只打开一个子窗体。如果是这种情况,MDI就不是适合该作业的工具。您可以构建
UserControl
s,并将它们交换到主应用程序窗体中或从主应用程序窗体中交换出来。

以下是一种更简洁、更现代、更精确的关闭所有MDI子窗体的方法:

static void CloseAllMdiChildForms()
{
    foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // ToArray necessary to build a snapshot
        form.Close();
}
静态void CloseAllMdiChildForms()
{
foreach(Application.OpenForms.Cast()中的var form.Where(f=>f.ismdhild.ToArray())//构建快照所需的ToArray
form.Close();
}
不过,听起来您希望在任何给定时间只打开一个子窗体。如果是这种情况,MDI就不是适合该作业的工具。您可以构建
UserControl
s,并将它们交换到主申请表中或从主申请表中交换出来。

这是最好的:

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();
}
静态void CloseAllMdiChildForms()
{
foreach(Application.OpenForms.Cast()中的var form.Where(f=>f.ismdhild.ToArray())//ToArray是构建快照所必需的
form.Close();
}
这是最好的:

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();
}
静态void CloseAllMdiChildForms()
{
foreach(Application.OpenForms.Cast()中的var form.Where(f=>f.ismdhild.ToArray())//ToArray是构建快照所必需的
form.Close();
}

数组。调整大小
真的吗?使用动态大小的容器,如
列表
数组。是否调整大小
真的?使用动态大小的容器,如
列表
。请看,我有一个管理员表单,在这个表单中有很多菜单项,所有这些都会打开一个新表单。但是打开一个新表单,当我再次打开一个新表单时,新表单将打开,但旧表单不会关闭。管理员表单中有许多表单打开。当我点击菜单项打开任何表单时,另一个表单应该是关闭的。@vivek:我不清楚你的具体要求是什么,但菜单项的点击处理程序没有魔力。你必须编写在那里执行的代码,这样你就可以做任何你想做的事情。我有一个管理员表单,在这个表单中有很多菜单项,所有这些都会打开一个新表单。但是打开一个新表单,当我再次打开一个新表单时,新表单将打开,但旧表单不会关闭。管理员表单中有许多表单打开。当我点击菜单项打开任何表单时,另一个表单应该是关闭的。@vivek:我不清楚你的具体要求是什么,但菜单项的点击处理程序没有魔力。你必须编写在那里执行的代码,这样你就可以做任何你想做的事情。