尝试关闭除主菜单之外的所有表单
FormCollection formsList = Application.OpenForms;
Run Code Online (Sandbox Code Playgroud)
用一个foreach循环说,
if (thisForm.Name != "Menu") thisForm.Close();
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,它跳过菜单,然后关闭第一个,但然后错误:
收集被修改; 枚举操作可能无法执行
并停止.我已经尝试了几个地方,并且他们都说这个foreach循环是这样做的方式,并且特别令人讨厌,因为我在关闭表单后没有更新表单列表,我认为这可能有效.我唯一能想到的就是从后面开始,用一段时间前进.
Tre*_*ott 57
如果使用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();
}
Run Code Online (Sandbox Code Playgroud)
或者你可以使用for循环:
for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
{
if (Application.OpenForms[i].Name != "Menu")
Application.OpenForms[i].Close();
}
Run Code Online (Sandbox Code Playgroud)
或者,我的新的和当前最喜欢的,你可以使用Reverse()方法:
foreach (Form f in Application.OpenForms.Reverse())
{
if (f.Name != "Menu")
f.Close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37706 次 |
| 最近记录: |