VB.NET: DialogResult.No 没有关闭表格

VB.NET: DialogResult.No is not closing the form

使用消息框DialogResult.No关闭表单的条件未按预期执行。

formclosing 事件在关闭前询问用户是否保存文档。

以下是我的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

该代码有各种错误。首先,鉴于只有两个选项,使用 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