【问题标题】:VB.NET Prevent MDI Parent FormClosing from Closing MDI Child before checkVB.NET 防止 MDI Parent FormClosing 在检查前关闭 MDI Child
【发布时间】:2011-10-09 18:30:01
【问题描述】:

我试图让用户有机会通过抛出“Are you sure?”来取消 MDI Parent 的 FormClosing。带有 e.cancel 的 msgbox 但是,当 MDI Parent 调用 FormClosing 时,所有 MDI Children 首先关闭,然后才出现 msgbox。

我想知道是否有一种更简单的方法可以防止 MDI 子窗体关闭,而不是必须取消每个子窗体的 FormClosing 直到我得到对关闭的积极响应,然后将所有关闭事件推送给子窗体,因为这看起来像如果您有很多 MDI 孩子,那就太麻烦了。

编辑:我想我能找到的唯一解决方案是添加 如果 e.CloseReason = CloseReason.MdiFormClosing 那么 e.Cancel = True 到 FormClosing 事件并改用 ApplicationExit。

【问题讨论】:

  • 这样的 UI 让我抓狂。是的,我敢肯定。
  • 如果你意识到你在它关闭后不确定怎么办哈哈
  • 然后我说“拍摄”并重新启动它,我的错误。那是每百次射击。
  • 但你不同意一点不适可以减轻很多痛苦吗?
  • 为什么关闭一个程序会导致“很多痛苦”?我一直关闭程序,从不疼。

标签: vb.net mdi formclosing


【解决方案1】:
If e.CloseReason = CloseReason.MdiFormClosing Then
   e.Cancel = True
End If

应该完成这项工作,之后您可以在想要关闭应用程序时使用 Application.Exit

【讨论】:

    【解决方案2】:

    从父表单开始

        frmMdiChild1.MdiParent = Me
        frmMdiChild1.Show()
    

    添加表单关闭子

    Private Sub frmMdiChild1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If e.CloseReason = CloseReason.UserClosing Then
            e.Cancel = True
        End If
    End Sub
    

    @Theveloper:我试过 .MdiFormClosing 但没有用。为了找出使用什么,我做了一个 MsgBox(e.CloseReason)。此外,只有 e.Cancel = True 也会阻止父级关闭(lol)。

    (vb.net 2010)

    【讨论】:

      【解决方案3】:

      公共类 clsGlobalVariables

      Public Shared mdi_main As mdiMain
      

      结束类

      导入 System.Windows.Forms

      公共类 mdiMain

      Public forced_close As Boolean = False
      
      Private Sub mdiMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
          e.Cancel = True
          If MsgBox("Are you sure you want to exit?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
              ' Close all child forms of the parent.
              For Each ChildForm As Form In Me.MdiChildren
                  ChildForm.Close()
              Next
              e.Cancel = False
          End If
      End Sub
      

      结束类

      公开课会员

      Private Sub frmMember_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
          Select Case e.CloseReason
              Case CloseReason.UserClosing
                  e.Cancel = True
                  If Not clsGlobalVariables.mdi_main.forced_close Then
                      If MsgBox("Are you sure you want to close?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
                          e.Cancel = False
                      End If
                  End If
              Case Else
                  clsGlobalVariables.mdi_main.forced_close = True
                  e.Cancel = True
          End Select
      End Sub
      

      结束类

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多