试图在visual basic中关闭所有打开的表单

Kli*_*k45 3 .net vb.net unhandled-exception winforms

我想要它,所以当我点击我的按钮时,我退出我的应用程序.我尝试了一个简单的for循环:

Private Sub CloseAllToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CloseAllToolStripMenuItem.Click
    For Each Form In My.Application.OpenForms
        Form.Close()
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

但是在使用此按钮关闭表单之外的所有表单之后,我收到此错误:

mscorlib.dll中发生了未处理的"System.InvalidOperationException"类型异常附加信息:集合已被修改; 枚举操作可能无法执行.

我相信这是因为我在循环之前关闭执行代码的表单可以转到下一个表单.如果是这种情况,我怎么能做到这一点,一旦最后一个表格关闭,我的循环结束?我甚至可以这样做吗?

Rez*_*aei 6

关闭所有但当前的形式:

My.Application.OpenForms.Cast(Of Form)() _
              .Except({Me}) _
              .ToList() _
              .ForEach(Sub(form) form.Close())
Run Code Online (Sandbox Code Playgroud)

通常关闭申请:

Application.Exit()
Run Code Online (Sandbox Code Playgroud)

强制申请退出:

Environment.Exit(1)
Run Code Online (Sandbox Code Playgroud)

  • @Codexer区别在于轻轻关闭或强制退出(杀死).例如,在某些表单的结束事件中放置一个消息框,询问您是否确实要关闭表单并设置`e.Cancel = true`以查看差异. (2认同)