VB.net: Как я могу запросить пользователя, если он собирается закрыть свою программу с несохраненными данными? - PullRequest
4 голосов
/ 17 ноября 2010

Я работаю, работая с Visual Basic 2010 Express. У меня есть DataGridView, который связан с локальной базой данных SQL, которую я создал. У меня есть это в настоящее время, где пользователь может нажать кнопку, чтобы сохранить свои данные в БД, но я не уверен, как предложить им сохранить или отменить изменения, если они закрывают программу без сохранения.

Спасибо!

Ответы [ 5 ]

6 голосов
/ 17 ноября 2010

Сохраняйте глобальное логическое значение (Dim _bDocumentChanged as boolean), и при возникновении любых событий DataGridView установите логическое значение на True, а затем в Form_Closing () проверьте это логическое значение и выведите окно сообщения.

4 голосов
/ 17 ноября 2010

Я думаю, вы также должны предоставить отмену, чтобы пользователь мог отменить закрытие без необходимости сохранять данные или потерять внесенные изменения.Как то так:

    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
2 голосов
/ 17 ноября 2010

Я бы подсказал им, используя событие 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
1 голос
/ 17 ноября 2010

Я бы предложил перехватить событие FormClosing в главном окне.Помните, когда закрывается главное окно, приложение закрывается.Если это MDI-приложение, убедитесь, что каждое дочернее окно можно сохранить, прежде чем разрешить завершать работу приложения.

1 голос
/ 17 ноября 2010

Перехватить событие закрытия приложения. Первое, что вы делаете, это подсказываете пользователю. если они скажут да, тогда сохраните. Затем выполните обычное отключение.

Вы также можете оставить флаг, чтобы отслеживать наличие несохраненных данных. Это очищается, когда пользователь сохраняет, но устанавливается, когда они вносят изменения.

...