【问题标题】:VB.NET: DialogResult.No is not closing the formVB.NET:DialogResult.No 没有关闭表单
【发布时间】:2019-03-19 16:15:05
【问题描述】:

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

【问题讨论】:

  • 永远不要在 FormClosing 的事件处理程序中调用 Close(),这会导致事件再次被触发。表单已经在关闭的路上,所以只需删除这些调用。
  • 点击“No”后一直显示消息,因为使用的是“Me”,Handle。
  • 感谢汉斯帕桑特。我明白了。

标签: vb.net messagebox dialogresult


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2019-09-26
    • 2012-06-28
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多