尝试使用
关闭除主菜单以外的所有窗体FormCollection formsList = Application.OpenForms;
用一个 foreach 循环并说,
if (thisForm.Name != "Menu") thisForm.Close();
工作正常,它跳过菜单,并关闭第一个菜单,但随后出现错误:
Collection was modified; enumeration operation may not execute
然后停下来。我已经尝试了几个地方,他们都说这个 foreach 循环是这样做的方法,这特别烦人,因为我在关闭表单后没有更新我的表单列表,我认为这可能有效。我唯一能想到的就是从后面开始,用一段时间向前。
最佳答案
如果您使用 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();
}
关于c# - 在 C# 中关闭除主菜单之外的所有打开的窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029351/