1

「よろしいですか?」をスローして、MDI親のFormClosingをキャンセルする機会をユーザーに提供しようとしています。ただし、e.cancelを使用したmsgboxは、FormClosingがMDI親によって呼び出されると、msgboxが表示される前に、すべてのMDI子が最初に閉じます。

MDIの子が閉じるのを防ぐ簡単な方法があるのではないかと思っていたのですが、閉じるための肯定的な応答が得られるまですべての子フォームのFormClosingをキャンセルしてから、子のすべての閉じるイベントをプッシュする必要があります。 MDIの子がたくさんいる場合は面倒です。

編集:私が見つけることができる唯一の解決策は、If e.CloseReason = CloseReason.MdiFormClosing Then e.Cancel = TrueをFormClosingイベントに追加し、代わりにApplicationExitを使用することだと思います。

4

3 に答える 3

0
If e.CloseReason = CloseReason.MdiFormClosing Then
   e.Cancel = True
End If

アプリケーションを使用できるようになるまでの作業を実行する必要があります。アプリケーションを閉じたいときはいつでも終了します。

于 2011-10-19T07:39:31.770 に答える
0

親からフォームを開始

    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のみでも、親が閉じるのを防ぎます(笑)。

(vb.net 2010)

于 2012-10-26T14:38:31.767 に答える
0

パブリッククラス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

エンドクラス

パブリッククラスfrmMember

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

エンドクラス

于 2017-03-15T08:51:18.990 に答える