我正在尝试使用以下代码迭代我的应用程序中的所有当前打开的表单,并关闭它们,除了主表单作为清理的一部分。
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
但是,我收到InvalidOperationException
,因为执行frm.Close()
时,openForms
中的条目将被删除,从而更改集合的大小。我显然做错了,所以如果有人能指出我这里的问题,那就太棒了。否则,有没有其他方法可以做这样的事情?
答案 0 :(得分:6)
向后迭代,以便修改集合不是字节:
For ix As Integer = Application.OpenForms.Count - 1 To 0 Step -1
Dim frm = Application.OpenForms(ix)
'' etc..
Next
答案 1 :(得分:1)
使用“while”循环而不是“For”,检查Application.OpenForms.Count&gt; 1 当你使用while循环时,你会在“其他东西”发生时做“某事”。你不会迭代收集,也不会改变你。
答案 2 :(得分:0)
另一种方法:
For Each OFORM in Application.Openforms
With OFORM
'Methods and conditions here
End With
Next OFORM