Color scheme: Riviera
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Formulare über die Navigationsleiste öffnen

Formulare über die Navigationsleiste öffnen

Setzen Sie eine WklNavBar auf ein eigenes Navigationsformular – ein normales Formularfenster oder ein Popup –, das die Formulare der Anwendung als separate Fenster öffnet, statt die Seite eines Unterformulars auszutauschen.

Diese Seite zeigt den Weg per Code für eine Leiste, deren Einträge im Entwurf festgelegt sind. Eine an eine Navigationstabelle gebundene Leiste öffnet Formularziele und folgt dem aktiven Formular von selbst, ohne den Code unten: siehe Navigationsleiste aus einer Tabelle füllen.

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

Lösungsüberblick

Die Leiste kennt die Formulare nicht, zu denen sie führt: Navigate übergibt den Schlüssel des gewählten Eintrags, und die Anwendung öffnet das Formular mit DoCmd.OpenForm (das ein bereits geöffnetes Formular auch aktiviert). Drei Teile der Anwendung halten Leiste und Fenster im Gleichlauf:

  • Die Auswahl folgt dem aktiven Formular. Jedes Zielformular setzt in seinem Form_Activate die Eigenschaft SelectedKey der Leiste. Das Setzen von SelectedKey per Code löst kein Ereignis aus. Daher kann dies keine Navigation starten, gleich auf welchem Weg der Benutzer das Formular erreicht hat (über die Leiste, mit Strg+F6, über das Fenstermenü, durch einen Klick auf das Fenster).
  • Das Navigationsformular darf geschlossen sein. Ein Zielformular prüft, ob das Navigationsformular geöffnet ist, bevor es auf die Leiste zugreift. Ohne diese Prüfung scheitert Forms("frmNavigation") mit Fehler 2450.
  • Ungespeicherte Änderungen werden im Formular des ausgewählten Eintrags geprüft. BeforeNavigate fragt Dirty bei dem Formular ab, dessen Schlüssel SelectedKey enthält – dem Ziel, in dem der Benutzer zuletzt gearbeitet hat –, nicht bei Screen.ActiveForm: Bei einem Navigationsformular als Popup ist das aktive Formular das Navigationsformular selbst.

Umsetzung

Modul des Navigationsformulars frmNavigation; die Schlüssel der Einträge sind die Formularnamen:

Private Sub navMain_BeforeNavigate(ByVal Key As String, Cancel As Integer)
    Dim current As String
    current = Me!navMain.Object.SelectedKey
    If Len(current) = 0 Or current = Key Then Exit Sub
    If Not CurrentProject.AllForms(current).IsLoaded Then Exit Sub
    If Forms(current).Dirty Then
        MsgBox "Bitte die Änderungen in """ & Forms(current).Caption & """ zuerst speichern oder verwerfen.", vbExclamation
        DoCmd.SelectObject acForm, current
        Cancel = True
    End If
End Sub
 
Private Sub navMain_Navigate(ByVal Key As String)
    DoCmd.OpenForm Key
End Sub

Modul jedes Zielformulars (frmBestellungen, frmKunden, …):

Private Sub Form_Activate()
    ' The bar marks this form's entry; code raises no BeforeNavigate or Navigate.
    If CurrentProject.AllForms("frmNavigation").IsLoaded Then
        Forms!frmNavigation!navMain.Object.SelectedKey = Me.Name
    End If
End Sub

Hinweise

  • Mit Dokumenten im Registerkartenformat und mit überlappenden Fenstern, als ACCDB, als ACCDE und in der Access Runtime, für ein normales Navigationsformular und für eines als Popup gilt:
    • Eine Auswahl öffnet das Ziel, eine erneute Auswahl eines geöffneten Ziels aktiviert es.
    • Das Aktivieren eines Ziels per Code oder mit Strg+F6 verschiebt die Auswahl ohne BeforeNavigate oder Navigate.
    • Ein Ziel mit ungespeicherten Änderungen bricht die Auswahl ab, und die Auswahl bleibt stehen.
    • Die Leiste funktioniert mit maximiertem Ziel und mit minimiertem Navigationsformular.
    • Nachdem das Navigationsformular geschlossen wurde, löste das Aktivieren eines Ziels mit der Prüfung über IsLoaded keinen Fehler aus, ohne sie Fehler 2450.
  • Strg+F6 kann das Navigationsformular selbst aktivieren. Ein normales Navigationsformular nimmt wie jedes andere Formular am Fensterwechsel von Access teil. Die Auswahl bleibt dann auf dem letzten Ziel, also dem Formular, zu dem der Benutzer zurückkehrt. Ein Popup-Formular nimmt am Fensterwechsel nicht teil.
  • Die Tastenkombination gehört zum Formular der Leiste. ToggleShortcut (Strg+B) wirkt, solange das Navigationsformular den Fokus hat, nicht in einem Zielformular; dort bleibt die Taste bei Access. Bieten Sie die Umschaltfläche an, oder rufen Sie Toggle in den Zielformularen über eine eigene Taste auf.
  • Nicht angeheftet öffnet sich die Leiste über ihrem eigenen Formular. Die aufgeklappte Überlagerung liegt über dem Fenster des Navigationsformulars, auch während ein Zielformular aktiv ist. Sie ist kein Fenster über den Zielen.
  • Wo der Fokus nach einem Abbruch bleibt. Bei einem normalen Navigationsformular behält das Ziel den Fokus, bei einem Popup-Formular hat ihn das Navigationsformular. DoCmd.SelectObject im Beispiel holt in beiden Fällen das Formular mit den Änderungen nach vorn.
  • Warum dies bei einer im Entwurf festgelegten Leiste Anwendungscode ist. Welches Formular ein Schlüssel öffnet, mit welchen OpenArgs, welchem Filter oder Fenstermodus, und was als ungespeichert gilt (ein geänderter Datensatz, ein geöffnetes Dialogfeld, ein laufender Import), weiß nur die Anwendung. Die Leiste trägt dazu bei, dass Code den Fenstern ohne Ereignisse folgen kann und dass sich eine Auswahl abbrechen lässt.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/open-forms-from-the-navigation-bar.txt · Last modified: by Wolfgang van der Stille