尝试关闭除主菜单以外的所有表单
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(); }