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:如果用户即将使用未保存的数据关闭他们的程序,我如何提示他们?的主要内容,如果未能解决你的问题,请参考以下文章
Datagridview 中的更改未保存在表 SQLite vb.net 中