VB.NET Предотвращение закрытия родительской формы MDI от закрытия дочернего MDI перед проверкой - PullRequest
1 голос
/ 09 октября 2011

Я пытаюсь дать пользователю возможность отменить FormClosing MDI Parent, выдав «Вы уверены?»msgbox с e.cancel, однако, когда FormClosing вызывается родителем MDI, все дочерние объекты MDI закрываются первыми, прежде чем появится сообщение msgbox.

Мне было интересно, есть ли более простой способ предотвратить закрытие MDI-детей, чем необходимость отменять FormClosing для каждой дочерней формы до тех пор, пока я не получу положительный ответ на закрытие, а затем отправить все закрывающие события на детей, потому чтоэто кажется слишком хлопотным, если у вас много детей с MDI.

РЕДАКТИРОВАТЬ: я думаю, единственное решение, которое я могу найти, это добавить, если e.CloseReason = CloseReason.MdiFormClosing Then e.Cancel = True длясобытие FormClosing и использование взамен ApplicationExit.

Ответы [ 3 ]

0 голосов
/ 26 октября 2012

Запустить форму из родительского элемента

    frmMdiChild1.MdiParent = Me
    frmMdiChild1.Show()

Добавить Subclosing Sub

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

@ Разработчик: Я пытался .MdiFormClosing, но он не работал.Чтобы узнать, что использовать, я сделал MsgBox (e.CloseReason).Кроме того, только e.Cancel = True также предотвратит закрытие родителя (смеется).

(vb.net 2010)

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

Конечный класс

0 голосов
/ 19 октября 2011
If e.CloseReason = CloseReason.MdiFormClosing Then
   e.Cancel = True
End If

Следует выполнить работу, после которой вы можете использовать приложение. Выходите, когда хотите закрыть приложение

...