通过Windows窗体迭代并关闭它们?

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删除了的条目,更改了集合的大小.我显然做错了,所以如果有人能指出我这里的问题,那就太棒了.否则,有没有其他方法可以做这样的事情?

Han*_*ant 6

向后迭代,以便修改集合不会字节:

    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)