VB.NET: DialogResult.No не закрывает форму - PullRequest
0 голосов
/ 15 октября 2018

Использование окна сообщения DialogResult.No Условие закрытия формы не выполняется должным образом.

Событие закрытия формы спрашивает пользователя, сохранять документ или нет перед закрытием.

Ниже приведены моиСобытие FormClosing.

    Private Sub PDFViewSimple_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) _ 
Handles Me.FormClosing

            If doc.IsModified Then

                Dim message As String = "The document is modified, would you like to save it?"
                Dim caption As String = "File Not Saved"
                Dim buttons As MessageBoxButtons = MessageBoxButtons.YesNo
                Dim DefaultButton As MessageBoxDefaultButton = MessageBoxDefaultButton.Button1
                Dim icon As MessageBoxIcon = MessageBoxIcon.Question
                Dim result As DialogResult

                ' Displays A MessageBox.
                result = MessageBox.Show(message, caption, buttons, icon, DefaultButton)

                If (result = DialogResult.Yes) Then
                    Me.Save(Me.Text)
                    Me.Close()
                ElseIf (result = DialogResult.No) Then
                    Me.Close()  ''Should I replace with (Application.Exit)
                End If

            End If

    End Sub

1 Ответ

0 голосов
/ 15 октября 2018

С этим кодом все в порядке.Во-первых, учитывая, что есть только два варианта, использовать ElseIf бессмысленно, хотя и не строго неверно.Если это не Yes, тогда это должно быть No, поэтому вам понадобится только Else:

If (result = DialogResult.Yes) Then
    Me.Save(Me.Text)
    Me.Close()
Else
    Me.Close()
End If

Далее, даже Else бессмысленно, потому что вы звоните Close независимо от результата.Все, что вам нужно сделать, это проверить Yes, сделать что-то определенное для Yes и затем позвонить Close независимо от:

If (result = DialogResult.Yes) Then
    Me.Save(Me.Text)
End If

Me.Close()

Наконец, вам вообще не следует звонить Close.Вы находитесь в обработчике событий FormClosing, поэтому форма уже закрывается.Вам нужно только что-то сделать, если вы хотите, чтобы форма НЕ закрывалась.Итак, все, что вам нужно, это:

If (result = DialogResult.Yes) Then
    Me.Save(Me.Text)
End If

Если вы хотите, чтобы форма НЕ закрывалась, вы должны установить e.Cancel на True.

...