-1

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

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

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

1 回答 1

2

该代码有各种错误。首先,鉴于只有两个选项,使用ElseIf是毫无意义的,尽管并非完全错误。如果不是,Yes那么它必须是No,所以你只需要一个Else

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

接下来,即使是 anElse也是毫无意义的,因为无论结果如何,您都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.CancelTrue.

于 2018-10-15T09:15:12.733 回答