使用消息框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
答案 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
。