Cut*_*ert 0 vb.net foreach winforms
我正在尝试使用以下代码迭代我的应用程序中的所有当前打开的表单,并关闭它们除了主表单作为清理的一部分.
Dim openForms As Windows.Forms.FormCollection = Application.OpenForms
For Each frm As Windows.Forms.Form In openForms
If frm.Name.ToString() <> "FrmMainNew" Then
frm.Close()
End If
Next
Run Code Online (Sandbox Code Playgroud)
但是,我得到的是InvalidOperationException因为frm.Close()执行时,openForms删除了的条目,更改了集合的大小.我显然做错了,所以如果有人能指出我这里的问题,那就太棒了.否则,有没有其他方法可以做这样的事情?
向后迭代,以便修改集合不会字节:
For ix As Integer = Application.OpenForms.Count - 1 To 0 Step -1
Dim frm = Application.OpenForms(ix)
'' etc..
Next
Run Code Online (Sandbox Code Playgroud)