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

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

谢谢!

【问题讨论】:

    标签: vb.net datagridview save


    【解决方案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 应用程序,您必须在允许应用程序结束之前检查每个子窗口是否可以保存。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-02
            • 1970-01-01
            • 2012-12-30
            • 1970-01-01
            • 2019-10-01
            相关资源
            最近更新 更多