Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2008.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erweitern Sie Ihre Anwendungen um eine selbst gebaute Navigationsleiste, die Sie beliebig verschieben und konfigurieren können.

Techniken

Formulare, VBA

Voraussetzungen

Access 2000

Beispieldateien

aiuNavigationsleiste.zip

Shortlink

580

Navigationsleiste im Eigenbau

André Minhorst, Duisburg

Die Navigationsschaltfläche ist so zweckmäßig, dass sie von Access-Entwicklern vermutlich oft kaum noch wahrgenommen wird: Soll der Benutzer zwischen den Datensätzen blättern oder soll er nicht? Dementsprechend schaltet man die Eigenschaft Navigationsschaltflächen anzeigen entweder an oder aus. Manchmal passt die eingebaute Variante aber auch einfach nicht: Beispielsweise, wenn die Anordnung von Haupt- und Unterformular eine eher verwirrende Anzeige der Navigationsschaltflächen bewirkt oder wenn die Navigationsleiste einfach einmal ganz anders aussehen soll.

Dieser Beitrag liefert gleich zweierlei für die unterschiedlichen Ansprüche: Der erste Teil zeigt, wie Sie mit wenig Aufwand eine selbst gebaute Schaltfläche - nennen wir sie der Einfachheit halber aiuNavigationsleiste - in Ihrem Formular unterbringen, und im zweiten Teil lernen Sie, wie diese nachgebaute Variante der Navigationsleiste funktioniert.

Einsatz der aiuNavigationsleiste

Die Beispieldatenbank enthält einige Tabellen, auf deren Basis Sie ein Formular erstellen können. Für den Anfang verwenden Sie die Tabelle tblPersonal: Erstellen Sie ein neues Formular und weisen Sie der Eigenschaft Datenherkunft den Namen dieser Tabelle zu. Fügen Sie dann die gewünschten Felder aus der Feldliste in den Detailbereich ein. Wenn Sie nun in die Formularansicht wechseln, haben Sie die übliche Navigationsleiste vor sich - die können Sie auch zunächst einmal beibehalten, um das Verhalten der eingebauten mit der neu hinzugefügten selbst gebauten Navigationsleiste zu vergleichen (s. Abb. 1).

missing image file

Abb. 1: Ein Formular mit der eingebauten Navigationsleiste

Wenn Sie die Navigationsleiste in einer eigenen Datenbank einsetzen möchten, brauchen Sie nur die beiden Elemente sfmNavigationsleiste und mdlNavigationsleiste aus der Beispieldatenbank in die Datenbank zu importieren - die übrigen Schritte sind nachfolgend beschrieben.

Unterformular als Navigationsleiste

Die selbst gebaute Navigationsleiste kommt in Form eines Unterformulars. Warum das? Warum kann man die Steuerelemente nicht einfach so in das Formular integrieren? Klar kann man: Wenn man sich die Arbeit jedesmal neu machen möchte ... Das Unterformular hat jedoch den großen Vorteil, dass Sie die Steuerelemente nur einmal arrangieren müssen und auch deren Steuerung per VBA nur von einer Stelle innerhalb der Datenbank erfolgt.

Die Vorteile bei der Verwendung eines Unterformulars zeigen sich bereits beim Einbau: Sie brauchen einfach nur das Zielformular in der Entwurfsansicht zu öffnen und das Formular sfmNavigationsleiste vom Datenbankfenster (oder, in Access 2007, vom Navigationsbereich) in den gewünschten Bereich zu ziehen. Dabei können Sie sich tatsächlich - und das ist der größte Vorteil der selbst gebauten Navigationsleiste - aussuchen, wo Sie es unterbringen. Das kann irgendwo im Detailbereich sein, aber auch im Kopf- oder im Fußbereich des Formulars (nicht jedoch im Seitenkopf oder Seitenfuß, denn diese Bereiche sind natürlich nur beim Drucken sichtbar).

Wenn Sie das Formular sfmNavigationsleiste nun beispielsweise unten im Formularfuß einfügen, sieht das wie in Abb. 2 aus.

missing image file

Abb. 2: Ein Formular mit frisch eingefügter Navigationsleiste

Das Hinzufügen der Beschriftung (hier Navigationselement) lässt sich leider nicht vermeiden, also entfernen Sie dieses Bezeichnungsfeld einfach und positionieren das Unterformular noch, sodass dieses wie in Abb. 3 aussieht - hier ist aus Gründen der Optik bereits der Datensatzmarkierer ausgeblendet.

missing image file

Abb. 3: Die eingebaute Navigationsleiste in der Formularansicht

Außerdem wurde die Eigenschaft Rahmenart des Unterformularsteuerelements auf Transparent eingestellt.

Anpassungen

Es funktioniert bereits alles wie gewünscht - dies zeigt ein Vergleich der Steuerelemente der eingebauten mit denen der selbst hinzugefügten Navigationsleiste. Letztere bietet aber noch mehr Möglichkeiten, die Sie sich mit wenigen Zeilen Code erschließen können. Dazu legen Sie zunächst im Klassenmodul des Hauptformulars eine Variable an, in der Sie einen Verweis auf das Unterformular mit der Navigationsleiste speichern. Um ein Klassenmodul anzulegen, wechseln Sie in die Entwurfsansicht des Hauptformulars und legen eine Ereignisprozedur an - eine, die Sie ohnehin gleich benötigen. Es handelt sich um das Ereignis Beim Laden, das direkt beim Öffnen des Formulars ausgelöst wird.

Um ein solches Ereignis anzulegen, zeigen Sie das Eigenschaftsfenster des Hauptformulars an und wechseln dort zur Registerseite Ereignis. Dort klicken Sie doppelt in die Eigenschaft Beim Laden und dann auf die nun erscheinende Schaltfläche mit den drei Punkten.

Es öffnet sich der VBA-Editor und zeigt eine leere Ereignisprozedur namens Form_Load an:

Private Sub Form_Load()

    End Sub

Oberhalb dieser Routine schreiben Sie nun die folgende Zeile hin (ohne Zeilenumbruch):

Private WithEvents objNavi As

Form_sfmNavigationsleiste

Damit legen Sie eine Variable an, in der Sie einen Verweis auf das Klassenmodul des Unterformulars speichern. Das Schlüsselwort WithEvents besagt, dass es möglich ist, auf das Auslösen von Ereignissen des Unterformulars zu reagieren. Und das ist eine interessante Geschichte: Sie können so im Hauptformular beispielsweise eine Ereignisprozedur für das Unterformular anlegen, die ausgelöst wird, wenn das gleiche Ereignis im Unterformular auftritt. Wie Sie davon profitieren können, erfahren Sie gleich - zunächst einmal müssen Sie die Objektvariable objNavi füllen.

Und dazu verwenden Sie genau die gerade angelegte Ereignisprozedur Beim Laden. Hier fügen Sie dazu die folgende Zeile ein:

Private Sub Form_Load()

    Set objNavi = Me!Navigationselement.Form

    End Sub

Schaltflächen anpassen

Die erste Möglichkeit, die sich durch das Referenzieren des Unterformulars ergibt, ist das Anpassen der angezeigten Schaltflächen. Die aiuNavigationsleiste liefert nämlich nicht nur die Standardschaltflächen, sondern auch noch weitere. Welche das sind, erfahren Sie über die Konstanten, mit denen Sie die Schaltflächen auswählen. Dazu geben Sie einige weitere Zeilen ein, zunächst jedoch die folgenden:

With objNavi

End With

Zwischen diese Zeilen brauchen Sie nur noch einen Punkt zu setzen, damit IntelliSense automatisch die Eigenschaften und Methoden des Unterformulars anzeigt. In Abb. 4 ist dies bereits geschehen, dort wurde die Eigenschaft ButtonSet ausgewählt. Nach Eingabe des Gleichheitszeichens finden Sie alle möglichen Konstanten für die einzelnen Schaltflächen vor:

missing image file

Abb. 4: Festlegen individueller Schaltflächen für die Navigationsleiste

  • eButtonFirst: zum ersten Datensatz
  • eButtonLast: zum letzten Datensatz
  • eButtonNext: zum nächsten Datensatz
  • eButtonPrev: zum vorherigen Datensatz
  • eButtonFastNext: blättert mehrere Datensätze vor (Standard: zehn Datensätze)
  • eButtonFastPrev: blättert mehrere Datensätze zurück (Standard: zehn Datensätze)
  • eButtonNew: neuer Datensatz
  • eButtonDel: Datensatz löschen
  • eButtonCount: Anzahl der Datensätze
  • eButtonNo: aktuelle Datensatznummer (nicht zu verwechseln mit dem Primärschlüsselwert)
  • eButtonStore: Datensatz speichern
  • eButtonUndo: Rückgängig

Wenn Sie die Schaltflächen individuell zusammenstellen möchten, geben Sie die gewünschten Konstanten durch den Operator Or getrennt an.

Wenn Sie dort etwa die folgende Kombination eingeben, erhalten Sie die Navigationsleiste aus Abb. 5:

missing image file

Abb. 5: Navigationsleiste mit nur zwei Schaltflächen

With objNavi

.ButtonSet = eButtonPrev Or eButtonNext

End With

Sie können auch auf fertige Sets von Navigationselementen zugreifen. Diese sind in Form weiterer Konstanten im Modul mdlNavigationsleiste zusammengefasst. Die Standardvariante sieht beispielsweise so aus (ohne Zeilenumbruch):

Public Const eButtonStd = eButtonFirst Or

eButtonLast Or eButtonNext Or eButtonPrev Or eButtonCount Or eButtonNo Or eButtonNew

Farbe anpassen

Möglicherweise hat das Hauptformular eine andere Hintergrundfarbe als das Unterformular mit den Navigationsschaltflächen. Auch für diesen Fall ist vorgesorgt: Sie können dann die Methode AdjustColor aufrufen. Diese liest die Farbe des passenden Bereichs des Hauptformulars ein und wendet diese Farbgebung auf das Unterformular an.

Auf Aktionen reagieren

Wie oben erwähnt, wurde die Variable objNavi als WithEvents deklariert, um auf Ereignisse des Unterformulars reagieren und für diese eigene Funktionen implementieren zu können.

Das geht ganz leicht: Klicken Sie einfach einmal im Codefenster des VBA-Editors auf das Kombinationsfeld links oben und wählen Sie dort den Eintrag objNavi aus. Der VBA-Editor legt automatisch die Ereignisprozedur objNavi_NaviClick an (s. Abb. 6). Diese hat zwei Parameter:

missing image file

Abb. 6: Das Ereignis NaviClick wird jedesmal ausgelöst, wenn der Benutzer auf eine Schaltfläche der Navigationsleiste klickt.

  • Button liefert die Konstante für die Schaltfläche, die der Benutzer angeklickt hat, und
  • Cancel erwartet den Rückgabewert True, wenn der Vorgang abgebrochen werden soll.

Wir demonstrieren die Funktionsweise an einem einfachen Beispiel. Angenommen, der Benutzer soll vor dem Löschen eines Datensatzes zunächst gefragt werden, ob er diesen auch tatsächlich löschen möchte.

Dann legen Sie die oben genannte Ereignisprozedur an und prüfen darin, ob der Benutzer die Löschen-Schaltfläche gedrückt hat. Falls ja, soll Access ein Meldungsfenster anzeigen, das den Benutzer fragt, ob er den Datensatz tatsächlich löschen möchte. Das sieht im Zusammenhang so wie in Listing 1 aus.

Listing 1: Abfrage beim Löschen eines Datensatzes

Private Sub objNavi_NaviClick(Button As eButtonSet, Cancel As Boolean)

    Select Case Button

    Case eButtonSet.eButtonDel

    If MsgBox(“Möchten Sie den Datensatz tatsächlich löschen?”, vbYesNo Or vbCritical, _

    â€œLöschbestätigung”) = vbNo Then

    Cancel = True

End If

End Select

End Sub

Schaltflächen aktivieren oder deaktivieren

Genau so wie Sie nur eine bestimmte Menge angezeigter Schaltflächen festlegen können, besteht auch die Möglichkeit, Schaltflächen zu aktivieren oder zu deaktivieren.

Dies kann zum Beispiel notwendig sein, wenn ein Benutzer keine Berechtigung hat, einen Datensatz anzulegen oder zu löschen.

In dem Fall verwenden Sie die Methode EnableButton, die als Parameter die Angabe einer oder mehrerer Schaltflächen-Konstanten erwartet. Dieses Beispiel sorgt für das Ausblenden der Schaltflächen wie in Abb. 7.

missing image file

Abb. 7: Deaktivierte Navigationsschaltflächen

Private Sub Form_Load()

    Set objNavi = Me!Navigationselement.Form

    With objNavi

    .EnableButton eButtonDel Or _

    eButtonNew, False

    End With

    End Sub

Schnell vor- und zurückblättern

Eine Erweiterung gegenüber der herkömmlichen Navigationsleiste sind die beiden Schaltflächen zum schnellen Vor- und Zurückblättern zwischen den Datensätzen. Diese aktivieren Sie mit folgenden Zeilen:

With objNavi

.ButtonSet = eButtonStd Or eButtonFastNext _

Or eButtonFastPrev

.WindFactor = 5

End With

Die erste legt fest, dass neben den Standardschaltflächen auch noch die beiden Schaltflächen zum schnellen Vor- und Zurückblättern angezeigt werden, und die zweite stellt die Anzahl der jeweils übersprungenen Datensätze ein. Im Formular erscheint die Navigationsschaltfläche nun so wie in Abb. 8.

missing image file

Abb. 8: Schnelles Vor- und Zurückblättern

Programmierung der aiuNavigationsleiste

Sie haben nun alles erfahren, was Sie zum Einsetzen der selbst gebauten Navigationsschaltfläche brauchen - nun geht es ans Eingemachte, nämlich an die dahintersteckenden Techniken.

Das benötigte Unterformular sieht, hier der Übersicht halber mit nebeneinander angeordneten Steuerelementen dargestellt, wie in Abb. 9 aus.

missing image file

Abb. 9: Das Unterformular mit den Elementen der Navigationsleiste in der Entwurfsansicht

Hauptformular suchen

Damit das Unterformular überhaupt mit dem Hauptformular interagieren kann, muss es auf dieses zugreifen können. Dies geschieht in der Regel über einen Ausdruck wie Me.Parent.

Da quasi jede Routine des Unterformulars sfmNavigationsleiste auf das Hauptformular zugreift, macht es Sinn, einen Verweis auf dieses in einer entsprechenden Objektvariablen zu speichern. Diese deklarieren Sie wie folgt:

Private WithEvents m_frm As Access.Form

Die Variable wird, wie schon bei der Objektvariablen zum Verweis auf das Unterformular im Hauptformular geschehen, mit dem Schlüsselwort WithEvents deklariert. Dies ist hier besonders wichtig: Immerhin zeigt das Unterformular Daten an, die es aus dem Hauptformular bezieht, und um auf dem aktuellsten Stand zu bleiben, muss es mitbekommen, wenn der Benutzer im Hauptformular den Datensatz wechselt, löscht oder einen neuen Datensatz anlegt.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Ereignisse im Eigenbau

Ereignisprozeduren

Ereignisprozeduren implantieren

Unterformulare: Daten anlegen und löschen

Formularposition speichern und wiederherstellen

m:n-Beziehung per Kontrollkästchen verwalten

Reihenfolge manuell anpassen

© 2003-2015 André Minhorst Alle Rechte vorbehalten.