【问题标题】:Trying to close all opened forms in visual basic试图在 Visual Basic 中关闭所有打开的表单
【发布时间】:2016-01-17 23:45:07
【问题描述】:

我想要它,所以当我的按钮被点击时,我会退出我的应用程序。我尝试了一个简单的 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

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

在 mscorlib.dll 中出现“System.InvalidOperationException”类型的未处理异常 附加信息:集合已修改;枚举操作可能无法执行。

我相信这是因为我在循环进入下一个表单之前关闭了执行代码的表单。如果是这种情况,我怎样才能让它在最后一个表单关闭后完成我的循环?我什至可以这样做吗?

【问题讨论】:

  • 您要退出应用程序还是要关闭除当前表单之外的所有表单?
  • 如果您关闭主/状态表单,应用程序可能会结束,这是您想要的吗?
  • 这是您需要的吗? System.Windows.Forms.Application.Exit()

标签: .net vb.net winforms unhandled-exception


【解决方案1】:

关闭当前表单以外的所有表单:

My.Application.OpenForms.Cast(Of Form)() _
              .Except({Me}) _
              .ToList() _
              .ForEach(Sub(form) form.Close())

正常关闭应用:

Application.Exit()

强制应用退出:

Environment.Exit(1)

【讨论】:

  • 你能解释一下Environment.Exit(1)背后的原因吗?据我了解,这用于基于控制台的应用程序...此外,如果您没有权限标志,您将引发安全异常。
  • @Codexer Environment.Exit 终止此进程并向操作系统返回退出代码。
  • 我知道它的作用,但为什么 Application.Exit 不够用?
  • @Codexer 区别在于轻轻关闭或强制退出(杀死)。例如,在某些表单的关闭事件中放置一个消息框,并询问您是否真的要关闭表单并设置e.Cancel=true以查看差异。
  • @Codexer 欢迎你:) 希望你的答案有用:)
【解决方案2】:

它的作用是关闭除“exceptthisform”或主窗体之外的所有窗体

     Dim formNames As New List(Of String)

        For Each currentForm As Form In Application.OpenForms

            If currentForm.Name <> "exceptthisform" Then

                formNames.Add(currentForm.Name)

            End If

        Next

        For Each currentFormName As String In formNames
            Application.OpenForms(currentFormName).Close()

        Next

【讨论】:

    【解决方案3】:

    这个很简单,加个验证就好了:

            For Each Form In My.Application.OpenForms
                If Form.name <> Me.Name Then
                    Form.Close()
                End If
            Next
    

    【讨论】:

    • 还要确保将关机模式从 :When startup form closes 设置为 when last form closes
    • 在通用列表的 foreach 循环中,您修改了列表(添加或删除了某些内容)。那是做不到的。
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多