Farbschema: Hell
Sie befinden sich hier: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Auf einer Seite mit ungespeicherten Änderungen bleiben

Auf einer Seite mit ungespeicherten Änderungen bleiben

Halten Sie den Benutzer auf der Seite, die er gerade bearbeitet, wenn er einen anderen Eintrag der WklNavBar wählt, statt seine Änderungen zu verlieren oder stillschweigend zu speichern.

Voraussetzungen: WKL Forms Object Library 1.24 oder höher.

Lösungsüberblick

BeforeNavigate läuft, bevor die Leiste ihre Auswahl ändert. Das Setzen von Cancel behält den aktuellen Eintrag bei und unterdrückt Navigate, sodass die Seite bleibt, wie sie ist. Form.Dirty des Seitenunterformulars gibt an, ob der angezeigte Datensatz ungespeicherte Änderungen hat.

Umsetzung

Private Sub navMain_BeforeNavigate(ByVal Key As String, Cancel As Integer)
    If PageDirty() Then
        Select Case MsgBox("Die Änderungen speichern?", vbYesNoCancel + vbQuestion)
            Case vbYes: Cancel = Not SavePage()
            Case vbNo: Me!sfPage.Form.Undo
            Case Else: Cancel = True
        End Select
    End If
End Sub
 
Private Sub navMain_Navigate(ByVal Key As String)
    Me!sfPage.SourceObject = "Form." & Key
End Sub
 
' A page showing a table or an unbound form has no unsaved record.
Private Function PageDirty() As Boolean
    On Error Resume Next
    PageDirty = Me!sfPage.Form.Dirty
End Function
 
' Saves the page's record; False when Access refused it (validation rule, required field).
Private Function SavePage() As Boolean
    On Error Resume Next
    Me!sfPage.Form.Dirty = False
    SavePage = (Err.Number = 0)
End Function

Hinweise

  • Nur die Auswahl durch den Benutzer löst BeforeNavigate aus (Klick, Eingabetaste, Leertaste, UI Automation). Das Setzen von SelectedKey per Code löst nichts aus, sodass Code den Eintrag einer Seite markieren kann, die er selbst geöffnet hat.
  • Eine an eine Navigationstabelle gebundene Leiste fragt selbst nach, bevor ein Unterformularziel eine Seite mit einem ungespeicherten Datensatz ersetzt, so wie Access beim Schließen eines geänderten Entwurfs (ConfirmUnsavedChanges, Standardwert True). Der Code oben gilt für eine Leiste, die ihre Seiten in Navigate anzeigt.
  • Ist die Seite geändert, wird die Auswahl abgebrochen; Seite und Auswahl bleiben. Nach Undo tauscht dieselbe Auswahl die Seite aus.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/stay-on-a-page-with-unsaved-changes.txt · Zuletzt geändert: von Wolfgang van der Stille