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

时间:2018-10-15 09:09:07

标签: vb.net messagebox dialogresult

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

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

1 个答案:

答案 0 :(得分:2)

该代码存在各种错误。首先,考虑到只有两个选项,使用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