关闭所有打开的表单,除了c#中的主菜单

前端之家收集整理的这篇文章主要介绍了关闭所有打开的表单,除了c#中的主菜单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试关闭除主菜单以外的所有表单
FormCollection formsList = Application.OpenForms;

用foreach循环说,

if (thisForm.Name != "Menu") thisForm.Close();

哪个工作可以,它跳过菜单,并关闭第一个,但它然后错误

Collection was modified; enumeration operation may not execute

并停止.我已经尝试了几个地方,他们都说这个foreach循环是这样做的,这是特别烦人的,因为我没有在关闭表单之后抛出我的表单,我认为可能会工作.我唯一可以想到的是从后面开始,使用一段时间前进.

任何帮助非常感谢,紧急,尽管截止日期是16:55 GMT今天!

干杯
瑞安

解决方法

如果您使用foreach通过集合枚举,则无法在迭代期间修改(添加删除项目).尝试将表单的引用复制到另一个集合,然后通过遍历该集合来删除它们.

在这种情况下,您可以使用列表或简单数组,例如:

List<Form> openForms = new List<Form>();

foreach (Form f in Application.OpenForms)
    openForms.Add(f);

foreach (Form f in openForms)
{
    if (f.Name != "Menu")
        f.Close();
}

或者你可以使用for循环:

for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
{
    if (Application.OpenForms[i].Name != "Menu")
        Application.OpenForms[i].Close();
}

或者,我的新的和当前最喜欢的,你可以使用Reverse()方法

foreach (Form f in Application.OpenForms.Reverse())
{
    if (f.Name != "Menu")
        f.Close();
}

猜你在找的HTML相关文章