VB.net:如果用户即将使用未保存的数据关闭他们的程序,我如何提示他们?

Posted

技术标签:

【中文标题】VB.net:如果用户即将使用未保存的数据关闭他们的程序,我如何提示他们?【英文标题】:VB.net : How can I prompt a user if they are about to close their program with unsaved data? 【发布时间】:2010-11-17 18:58:02 【问题描述】:

我正在使用 Visual Basic 2010 Express。我有一个与我创建的本地 SQL 数据库链接的 DataGridView。我目前有它,用户可以单击按钮将数据保存到数据库,但不确定如果他们关闭程序而不保存,如何提示他们保存或放弃更改。

谢谢!

【问题讨论】:

【参考方案1】:

保持一个全局布尔值 (Dim _bDocumentChanged as boolean) 并在触发任何 DataGridView 事件时将您的布尔值设置为 True,然后在 Form_Closing() 上检查该布尔值并抛出一个消息框。

【讨论】:

您应该允许他们使用 e.cancel 取消关闭事件。 @xpda - 你是对的,尽管这只是一个关于如何设置它的粗略想法,而不是场景的完整代码。 但是,此更改事件可能根本不会更改值。例如,将一个值更改为一个新值,然后再改回来。【参考方案2】:

我认为您还应该提供取消,以便用户可以取消关闭而不必保存数据或丢失他们已经做出的更改。像这样的:

    Private Sub frmMain_FormClosing(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

    Dim Answer As DialogResult = MessageBox.Show("Save Data before close?", _
        "Data Check", MessageBoxButtons.YesNoCancel)

    Select Case Answer
        Case Windows.Forms.DialogResult.Yes
            SaveRecords()
        Case Windows.Forms.DialogResult.No
            Exit Sub
        Case Windows.Forms.DialogResult.Cancel
            e.Cancel = True
        Case Else
            Exit Sub
    End Select

End Sub

【讨论】:

【参考方案3】:

我会使用表单的 OnClosing 事件提示他们。像这样的东西应该可以解决问题:

Private Sub YourDataGridViewForm_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    If MessageBox.Show(Me, "Do you want to save your changes?", "Unsaved Changes!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
        SaveChanges()
    End If
End Sub

Private Sub SaveChanges()
    MessageBox.Show("Changes saved...")
End Sub

【讨论】:

【参考方案4】:

捕获应用程序关闭事件。您要做的第一件事是提示用户。如果他们说是,那么保存。然后执行正常关机。

您还可以保留一个标志来跟踪是否存在任何未保存的数据。这在用户保存时被清除,但在他们进行更改时设置。

【讨论】:

【参考方案5】:

我建议在主窗口中使用 FormClosing 事件进行陷阱。请记住,当主窗口关闭时应用程序终止。如果这是一个 MDI 应用程序,您必须在允许应用程序结束之前检查每个子窗口是否可以保存。

【讨论】:

以上是关于VB.net:如果用户即将使用未保存的数据关闭他们的程序,我如何提示他们?的主要内容,如果未能解决你的问题,请参考以下文章

在 VB.net 中保存设置的最简单方法是啥

用vb.net怎么连接其他电脑上的oracle数据库

保存用户数据(Swift)[关闭]

Datagridview 中的更改未保存在表 SQLite vb.net 中

MysqlException 未处理 DataReader 必须关闭此连接 vb.net

vb.NET SaveAs 不保存所有 Excel 数据