Universelle Navigationsschaltflächen

Autor: André Minhorst, Duisburg

Die von Access zur Verfügung gestellten Navigationsschaltflächen lassen sich weder in ihrem Aussehen oder ihrer Größe verändern, noch können Sie deren Position beeinflussen. Es gibt allerdings gute Gründe, die eben genannten Dinge zu tun und die Navigationsschaltflächen an die eigenen Bedürfnisse anzupassen. Im vorliegenden Beitrag erfahren Sie, welche Gründe das sein können und wie Sie eigene, flexible Navigationsschaltflächen erstellen, die Sie in beliebige Formulare integrieren können.

Die Navigationsschaltflächen eines Access-Formulars haben prinzipiell zwei Nachteile: Erstens ist ihr Aussehen nicht veränderbar, und zweitens können Sie ihre Position nicht verändern.

Diese beiden Nachteile in Kombination führen manchmal zu etwas unübersichtlichen Formularen, z. B. wenn Sie innerhalb eines Formulars noch eines oder mehrere Unterformulare mit eigenen Navigationsschaltflächen unterbringen (s. Abb. 1) möchten.

Abb. 1: Ein Formular mit mehreren Navigationsschaltflächen

Hier wäre es beispielsweise denkbar, die Navigationsschaltflächen für die Navigation zwischen den einzelnen Firmen unmittelbar unter den Firmennamen unterzubringen.

Neben der Positionierung haben manche Datenbankanwender spezielle Wünsche, die das Aussehen der Datenbank und ihrer Bedienelemente betreffen. So ist es z. B. möglich, dass für eine spezielle Anwendung aus irgendwelchen Gründen keine Schaltflächen mit schwarzen Symbolen verwendet werden sollen.

In den folgenden Kapiteln lernen Sie, wie Sie Ihre eigenen Navigationsschaltflächen erstellen und diese flexibel in Ihren Formularen einsetzen können.

Die neuen Navigationsschaltflächen sollen flexibel einsetzbar sein, d. h. sie sollen schnell und einfach an der gewünschten Stelle platziert werden können.

Daher erstellen Sie ein eigenes Formular mit den Steuerelementen, die üblicherweise zu einer Navigationsschaltfläche gehören. Dieses Formular fügen Sie dann später als Unterformular in die gewünschten Formulare ein.

Abb. 2: Entwurfsansicht der späteren Navigationsleiste

Abb. 3: Die Navigationsschaltflächen sind nun mit Text versehen.

Erstellen des Unterformulars

Erstellen Sie zunächst ein neues Unterformular und speichern Sie es unter dem Namen frmNavigationsschaltflaechen. öffnen Sie es anschließend in der Entwurfsansicht.

Anlegen der Steuerelemente

Hier fügen Sie nun sieben Steuerelemente ein: fünf Schaltflächen und zwei Textfelder (s. Abb. 2). Die fünf Schaltflächen dienen der Navigation zum ersten, vorherigen, nächsten und letzten Datensatz des Formulars sowie zum Anlegen eines neuen Datensatzes.

Die zwei Textfelder dienen zur Anzeige der Nummer des aktuellen Datensatzes sowie zur Anzeige der Gesamtzahl der Datensätze.

Wie bereits erwähnt, sollen die Navigationsschaltflächen flexibel sein – dementsprechend müssen Sie sich natürlich nicht an die vorgegebenen Schaltflächen halten. Sie können beispielsweise auch Schaltflächen erstellen, die den Datensatzzeiger jeweils zehn Datensätze vor- oder zurückspringen lassen. Oder Sie legen ein zusätzliches Textfeld an, in dem Sie angeben können, wie viele Datensätze der Datensatzzeiger nach vorne oder hinten springen soll.

Tab. 1: Funktionen und Namen der unterschiedlichen Steuerelemente

Geben Sie den Schaltflächen die in Tab. 1 angegebenen Namen.

Künstlerische Gestaltung der Schaltflächen

Warum sollten Sie extra einen neuen Satz von Navigationsschaltflächen erstellen, wenn Sie diese nicht auch nach Ihren persönlichen Vorlieben gestalten können

Weniger anspruchsvolle Menschen können die Schaltfläche einfach mit den entsprechenden Texten versehen oder mit bestimmten Zeichen die Funktion der Schaltflächen andeuten.

So kommen beispielsweise die Beschriftungen |<, <, >, >| und * infrage. Schön sieht das allerdings nicht aus (s. Abb. 3).

Abb. 4: Einstellen der Größe der zukünftigen Schaltflächensymbole

Abb. 5: Auswahl von Bildern als Schaltflächensymbole

Symbole mit Paint erstellen

Verwenden Sie einfach ein Malprogramm, um professionell aussehende Schaltflächen zu erstellen. Sie können beispielsweise das zu Windows gehörende Malprogramm Paint verwenden, um die Schaltflächensymbole zu erstellen. Sie finden das Programm in der Regel im Startmenü von Windows unter dem Menüpunkt Programme ( Zubehör/Paint.

Wählen Sie eine sinnvolle Größe für die Symbole der Schaltflächen aus. Die üblichen Symbole in der Symbolleiste von Windows-Anwendungen sind in der Regel 32 x 32 Punkte groß. Selbstverständlich können Sie aber auch eine andere Größe verwenden.

Sie sollten also zunächst die Größe der Zeichnung an die gewünschte Symbolgröße anpassen. Wählen Sie dazu den Menübefehl Bild/Attribute. Geben Sie hier die Bildgröße ein (s. Abb. 4).

Wählen Sie in Paint die Farbe aus, die der gewünschten Hintergrundfarbe der Schaltflächen entspricht. Füllen Sie dann das komplette Bild mit der Farbe aus.

Nun sind Ihrer Fantasie keine Grenzen mehr gesetzt: Erstellen Sie die Symbole für Ihre Schaltflächen ganz nach Ihren Wünschen. Speichern Sie die Grafik-Dateien anschließend im ..bmp-Format ab und vergeben Sie aussagekräftige Namen, z. B. symBack oder symNew.

Schaltfläche mit einem Symbol versehen

Nachdem Sie alle benötigten Symbole erstellt haben, müssen Sie diese nun auf den entsprechenden Schaltflächen platzieren. Aktivieren Sie die Entwurfsansicht des Formulars mit den Navigationsschaltflächen und führen Sie die folgenden Schritte aus:

  • Klicken Sie auf die Schaltfläche, für die Sie ein Symbol einfügen möchten.
  • Falls das Eigenschaftenfenster nicht sichtbar ist, aktivieren Sie es mit dem Menübefehl Ansicht ( Eigenschaften.
  • Klicken Sie im Register Format des Eigenschaftsfensters in das Textfeld Bild.
  • Daraufhin erscheint rechts vom Textfeld eine Schaltfläche mit drei Punkten. Betätigen Sie die Schaltfläche, um die Grafikdatei mit dem Symbol auszuwählen.
  • Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
    Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
    Zur Bestellung ...
    Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
    Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

    Abb. 6: Einstellen der Eigenschaft Bildtyp

  • Im nun erscheinenden Dialog Bild-Generator (s. Abb. 5) können Sie entweder fertige Symbole auswählen oder mit der Schaltfläche Durchsuchen den Dialog zur Auswahl weiterer Dateien anzeigen.
  • Nach dem Betätigen der Schaltfläche Symbole wählen Sie das gewünschte Bild aus.
  • Einbetten oder verknüpfen

    Wenn Sie das Symbol ausgewählt haben, müssen Sie sich noch entscheiden, ob Sie das Bild auf der Schaltfläche in die Datenbank einbetten wollen oder ob Access nur eine Verknüpfung zu der Bilddatei erstellen soll.

    Im ersten Fall brauchen Sie neben der Datenbankdatei keine weiteren Dateien mehr mitschleppen. Im zweiten Fall müssen Sie das zwar tun, aber dafür wirken sich änderungen an der Bilddatei direkt auf das Symbol der Schaltfläche aus.

    Da Sie aber nicht unbedingt oft änderungen an den Bildern durchführen werden, können Sie diese besser einbetten. Das tun Sie, indem Sie die entsprechende Eigenschaft auf den Wert Einbetten einstellen (s. Abb. 6).

    Nun füllen Sie die Schaltflächen mit Leben: Sie hinterlegen für die Ereigniseigenschaft Beim Klicken der fünf Schaltflächen die entsprechenden Prozeduren (s. Quellcode 1 bis 5).

    Anweisung zum Verschieben desDatensatzzeigers

    Den Kern der Prozeduren bildet jeweils die Anweisung DoCmd.GotoRecord mit unterschiedlichen Werten für ihre Parameter.

    Der erste Parameter gibt an, auf welche Objektart sich die Methode bezieht. Im vorliegenden Fall ist das ein Formular. Die entsprechende Konstante heißt acDataForm.

    Der zweite Parameter enthält den Namen des Objektes. Die Verschiebung des Datensatzzeigers soll sich jeweils auf das Formular beziehen, in dem sich das Unterformular mit den Navigationsschaltflächen befindet. Für den Bezug auf solche Formulare stellt Access eine spezielle Eigenschaft zur Verfügung: die Parent-Eigen-schaft. Mit ihr können Sie den Namen des übergeordneten Formulars ermitteln und anschließend dessen Datensatzzeiger verschieben.

    Der dritte Parameter gibt an, wohin der Datensatzzeiger verschoben werden soll. Für einen Fall benötigen Sie noch einen vierten Parameter – dazu später mehr.

    Datensatzzeiger verschieben mit Dauerfeuer

    Die Navigation in größeren Datenmengen kann manchmal etwas unkomfortabel sein – vor allem, wenn Sie die Nummer des gewünschten Datensatzes nicht kennen. Dann ist mühsames Klicken durch die einzelnen Datensätze angesagt. Damit Sie sich dabei keine Sehnenscheidenentzündung holen, können Sie die Schaltfläche auch auf „Dauerfeuer“ einstellen. Wenn Sie die Schaltfläche per Maus gedrückt halten, können Sie schnell mehrere Datensätze durchblättern.

    Private Sub btnFirst_Click()
        Forms(Me.Parent.Name).SetFocus
        DoCmd.GoToRecord acDataForm, Me.Parent.Name,         acFirst
        Form_Current
    End Sub
    Private Sub btnLast_Click()
        Forms(Me.Parent.Name).SetFocus
        DoCmd.GoToRecord acDataForm, Me.Parent.Name, acLast
        Form_Current
    End Sub
    Private Sub btnNew_Click()
        Forms(Me.Parent.Name).SetFocus
        DoCmd.GoToRecord acDataForm, Me.Parent.Name, _        acNewRec
        Form_Current
    End Sub
    Private Sub btnNext_Click()
        Forms(Me.Parent.Name).SetFocus
        DoCmd.GoToRecord acDataForm, Me.Parent.Name, acNext
        Form_Current
    End Sub
    Private Sub btnPrevious_Click()
        Forms(Me.Parent.Name).SetFocus
        DoCmd.GoToRecord acDataForm, Me.Parent.Name, _        acPrevious
        Form_Current
    End Sub

    Da das nur für die beiden Schaltflächen btnNext und btnPrevious nötig ist, sollten Sie deren Eigenschaft Makro wiederholen auf den Wert Ja einstellen.

    Anzeige des aktuellen Datensatzes und der Anzahl der Datensätze

    Neben den fünf Schaltflächen haben Sie ja bereits zwei Textfelder angelegt. Beginnen wir mit dem Textfeld mit der leichteren Aufgabe: Es dient lediglich zur Anzeige der Datensatzanzahl.

    Der Inhalt des Textfeldes soll nicht bearbeitet werden, setzen Sie daher die Eigenschaft Aktiviert auf den Wert Nein und die Eigenschaft Gesperrt auf den Wert Ja.

    Um die Optik ein wenig an die üblicherweise verwendeten Navigationsschaltflächen anzupassen, ändern Sie die Hintergrundfarbe des Textfeldes noch so ab, dass sie der Farbe des Formularhintergrundes entspricht (s. Abb. 7).

    Anzahl der Datensätze

    Die Anzahl der aktuell vorhandenen Datensätze soll beim ersten Anzeigen des Formulars sowie bei jeder änderung aktualisiert werden. Daher hinterlegen Sie für die Ereig-niseigenschaft Beim Anzeigen des Formulars frmNavigationsschaltflächen die Prozedur aus Quellcode 6.

    Um die Gesamtzahl der Datensätze zu ermitteln, setzten Sie den Datensatzzeiger auf den letzten Datensatz und ermitteln anschließend die Anzahl mit der Eigenschaft RecordCount.

    Private Sub Form_Current()
        ''Ermitteln der Gesamtzahl der Datensätze
        Forms(Me.Parent.Name).RecordsetClone.MoveLast
        Me![txtAll] = Forms(Me.Parent.Name).RecordsetClone.RecordCount
        If Forms(Me.Parent.Name).NewRecord Then
            Me![txtAll] = Me![txtAll] + 1
            Me.btnNew.Enabled = False
            Me.txtGoto.SetFocus
            Me.btnNext.Enabled = False
        Else
            Me.btnNew.Enabled = True
            Me.btnNext.Enabled = True
        End If
        ''Ermitteln des aktuellen Datensatzes
        Me![txtGoto] = Forms(Me.Parent.Name).CurrentRecord
        If Me![txtGoto] = 0 Then
            Me![txtGoto] = 1
        End If
        If Me![txtGoto] = 1 Then
            Me.btnPrevious.Enabled = False
        Else
            Me.btnPrevious.Enabled = True
        End If
    End Sub

    Abb. 7: So könnten die neuen Navigationsschaltflächen aussehen.

    Hier gibt es noch eine Besonderheit: Falls soeben ein neuer Datensatz angelegt wurde, zählt die Eigenschaft RecordCount den neuen Datensatz noch nicht mit. Daher wird der Inhalt des Textfeldes txtAll in diesem Fall um eins erhöht.

    Aktuellen Datensatz ermitteln

    In der gleichen Prozedur (s. Quellcode 6) ermitteln Sie die Nummer des aktuellen Datensatzes. Dazu weisen Sie dem Textfeld txtAll die Eigenschaft CurrentRecord zu. Hierbei sind einige Besonderheiten zu beachten. Aus irgendwelchen Gründen gibt die Eigenschaft CurrentRecord als Wert des Textfeldes txtGoto beim Initialisieren des Formulars jeweils den Wert 0.

    Private Sub txtGoto_AfterUpdate()
        On Error Resume Next
        Forms(Me.Parent.Name).SetFocus
        DoCmd.GoToRecord acDataForm, Me.Parent.Name, acGoTo, Me!txtGoto
        If Err.Number = 2105 Then
            MsgBox "Sie können nicht zu dem angegebenen Datensatz springen."
        End If
        Form_Current
    End Sub
    Private Sub Form_Open(Cancel As Integer)
        If Me.Parent.AllowAdditions = False Then
            Me.btnNew.Enabled = False
        End If
    End Sub

    Bewegen Sie den Datensatzzeiger allerdings auf den nächsten Datensatz, erscheint der auf den eigentlichen Wert 1 folgende Wert 2. Daher fragt die Prozedur den Inhalt des Feldes txtGoto ab und ersetzt den Wert 0 gegebenenfalls durch den Wert 1.

    Aktivieren und Deaktivieren bestimmter Schaltflächen

    Die dritte und letzte Aufgabe der Prozedur, die durch die Ereigniseigenschaft Beim Anzeigen ausgelöst wird, ist das Aktivieren und Deaktivieren bestimmter Schaltflächen.

    Das ist beispielsweise dann erforderlich, wenn sich der Datensatzzeiger auf dem ersten Datensatz befindet. In diesem Fall soll die Navigationsschaltfläche, die den Datensatzzeiger in Richtung kleinerer Datensatznummern bewegt, gesperrt werden. Ebenso verhält es sich auf der anderen Seite: Befindet sich der Datensatzzeiger auf dem letzten oder einem neuen Datensatz, soll die Navigationsschaltfläche zum Vorwärtsbewegen des Datensatzzeigers deaktiviert werden.

    Direktes Auswählen eines bestimmten Datensatzes

    Das Textfeld txtGoto soll nicht nur die Nummer des aktuellen Datensatzes anzeigen, sondern auch zur Auswahl eines bestimmten Datensatzes dienen. Daher legen Sie für das Textfeld eine eigene Ereignisprozedur an, die nach der Aktualisierung des Textfeldes ausgelöst wird (s. Quell-code 8).

    Die Prozedur verwendet – ebenso wie die Prozeduren der Navigationsschaltflächen – die Methode DoCmd.GotoRecord. Im Gegensatz zu den Schaltflächen benötigen Sie hier auch noch den vierten Parameter. Er gibt an, zu welchem Datensatz der Datensatzzeiger springen soll.

    Abb. 8: Das Bestellungen-Formular mit neuen Navigationsschaltflächen

    Auch diese Prozedur beginnt mit der Anweisung On Error Resume Next. Die Anweisung verhindert einen Abbruch der Prozedur beim Auftreten eines Fehlers. Ein denkbarer Fehler ist die Eingabe eines nicht vorhandenen Datensatzes. Für diesen Fall enthält die Prozedur eine Abfrage der Fehlernummer, die beim Auftreten des entsprechenden Fehlers eine Meldung ausgibt.

    Neue Datensätze oder nicht

    Manche Formulare erlauben das Anfügen neuer Datensätze nicht. Tragen Sie dem mit Ihren Navigationsschaltflächen Rechnung. Falls ein Formular nicht zum Anfügen neuer Datensätze dienen soll, deaktivieren Sie die Schaltfläche zum Anfügen neuer Datensätze oder machen Sie sie unsichtbar.

    Dazu legen Sie eine neue Prozedur für die Ereigniseigenschaft Beim öffnen des Formulars an (s. Quellcode 8). Die Prozedur fragt die entsprechende Eigenschaft des Hauptformulars ab und entscheidet dann, ob die Schaltfläche btnNeu aktiviert oder deaktiviert wird.

    Der Großteil der Arbeit ist nun erledigt. Sie müssen lediglich noch das Unterformular mit den Navigationsschaltflächen in das gewünschte Formular integrieren und einige Anpassungen am Hauptformular vornehmen.

    Navigationsschaltflächen einbauen

    Am schnellsten und einfachsten fügen Sie dem Hauptformular die Navigationsschaltflächen auf die in der folgenden Schritt-für-Schritt-Anlei-tung beschriebenen Art hinzu.

  • öffnen Sie das Zielformular in der Entwurfsansicht und positionieren Sie es so, dass es nicht über dem Datenbankfenster liegt.
  • Aktivieren Sie das Register Formulare des Datenbankfensters.
  • Ziehen Sie das Formular frmNavigationsschaltflächen aus dem Datenbankfenster an die gewünschte Stelle im Hauptformular.
  • Fertig! Das Unterformular hat nun bereits die gewünschte Größe und ist fast voll einsatzbereit.
  • Beseitigen von Schönheitsfehlern

    Es weist jedoch noch einen Schönheitsfehler auf – nämlich die Beschriftung des Unterformular-Steuerelements (s. Abb. 8), die Sie jedoch leicht entfernen können. Ebenso sollten Sie das Navigationsschaltflächen-Unterformular noch etwas besser in das Hauptformular integrieren, indem Sie die Eigenschaft Spezialeffekt auf den Wert Flach und die Eigenschaft Rahmenart auf den Wert Transparent ändern.

    Navigationsschaltflächen aus der Reihenfolge nehmen

    Neben dem Ansteuern bestimmter Steuerele-mente eines Formulars können Sie auch mit der Tastatur durch die einzelnen Steuerelemente navigieren. Vor allem die Tab-Taste erweist sich hier oft als hilfreich, um von Steuerelement zu Steuerelement zu springen. Meistens kann man mit der Leertaste die Aktion eines Steuerelements ausführen – beispielsweise das Klicken auf eine Schaltfläche. Wie bei den originalen Navigationsschaltflächen von Access sollen aber auch

    Ihre eigenen nur per Maus und nicht per Tastatur zu erreichen sein.

    Datensatzwechsel per Tastatur

    Wenn Sie – wie im letzten Abschnitt beschrieben – das Unterformular mit den Navigationsschaltflächen aus der Reihenfolge der Steuerelemente genommen haben, kann folgendes passieren:

    Der Anwender navigiert sich per Tab-Taste durch die einzelnen Felder und Steuerelemente des Formulars und erreicht das letzte Steuerelement in der Reihenfolge. Wenn Sie nun die Eigenschaft Zyklus auf den Wert Alle Datensätze eingestellt haben, springt der Datensatzzeiger des Formulars automatisch auf den nächsten Datensatz. Die Anzeige der Datensatznummer in Ihrer Navigation reagiert aber nicht darauf, sondern zeigt weiterhin die vorherige Datensatznummer an.

    Damit das nicht passiert, müssen Sie der Ereignisprozedur Beim Anzeigen des Hauptformulars – sofern es bereits vorhanden ist – einen Befehl hinzufügen, der den Inhalt des Unterformulars aktualisiert.

  • Zeigen Sie das Hauptformular in der Entwurfsansicht an.
  • Aktivieren Sie das Eigenschaftsfenster und wechseln Sie in das Register Ereigniseigenschaften.
  • Wenn die Eigenschaft Beim Anzeigen bereits den Eintrag [Ereignisprozedur] enthält, klicken Sie in das Textfeld und danach auf die daneben erscheinende Schaltfläche. Falls nicht, klicken Sie zunächst doppelt in das leere Textfeld der Eigenschaft und dann auf die Schaltfläche.
  • Ergänzen Sie die Prozedur Form_Current um den folgenden Befehl:
  • Me!frmNavigationsschaltflächen.Requery

    Nun sollten die Navigationselemente einwandfrei funktionieren.

    Downloads zu diesem Beitrag

    Enthaltene Beispieldateien:

    Navigationsschaltfl

    Schreibe einen Kommentar

    Funktion

    Name

    Sprung auf den ersten Datensatz

    btnFirst

    Sprung auf den vorherigen Datensatz

    btnPrevious

    Sprung auf den nächsten Datensatz

    btnNext

    Sprung auf den letzten Datensatz

    btnLast

    Anlegen eines neuen Datensatzes

    btnNew

    Anzeige der aktuellen und Eingabe der gewünschten Datensatznummer

    txtGoto

    Anzeige der Anzahl der Datensätze

    txtAll