Kontextmenüs

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Autor: Martin Hoffmann, Düsseldorf

Kontextmenüs sind Menüs, die per Rechtsklick auf ein bestimmtes Objekt geöffnet werden können und Befehle anbieten, die speziell für das gewünschte Objekt vorgesehen sind. Access bietet wie jede andere Officeanwendung die Möglichkeit, solche Kontextmenüs in eigene Anwendungen einzubauen. Im vorliegenden Beitrag erfahren Sie, wie Sie ein solches Kontextmenü erstellen und mit Funktionalität versehen und wie Sie diese wieder entfernen können.

Hinweis

Die im vorliegenden Beitrag vorgestellten Beispiele finden Sie auf der Heft-CD in der Beispieldatenbank zum Beitrag Literaturverwaltung, dessen zweiten Teil Sie ebenfalls in diesem Heft finden.

Der Vorteil von Kontextmenüs besteht in ihrer Funktion, immer nur die Aktionen zu einem Objekt anzuzeigen, die mit diesem Objekt durchgeführt werden können. Auf diese Weise braucht der Anwender nicht lange nachzudenken, welche Aktionen für das Objekt gerade gültig sind. Sie finden Kontextmenüs deshalb in Windows selbst und in jeder Anwendung wieder.

Bild 1: Kontextmenü eines Listenfeldes

Bevor Sie mit der Erstellung von Kontextmenüs beginnen, müssen Sie sich überlegen, wo Sie diese einsetzen möchten und wie Sie die Aktionen des Kontextmenüs gestalten.

Einsatzmöglichkeiten

Generell können Sie für jedes Steuerelement in einem Formular ein eigenes Kontextmenü anlegen. Dazu bieten die Steuerelemente die Eigenschaft Kontextmenüleiste an. In dieser Eigenschaft werden alle verfügbaren, individuell erstellten Kontextmenüs aufgelistet, sodass Sie einfach eines auswählen können. Wenn Sie anschließend im Formular mit der rechten Maustaste auf das Steuerelement klicken, öffnet Access das Kontextmenü (siehe Bild 1).

Sie können Kontextmenüs auch auf Formular- oder Berichtsebene einsetzen. Verwenden Sie dazu die gleiche Eigenschaft wie bei den Steuerelementen. Das Kontextmenü erscheint, sobald Sie an einer beliebigen Stelle auf das Formular bzw. den Bericht klicken.

Bei Formularen können Sie zusätzlich über die Eigenschaft Kontextmenü definieren, ob generell in diesem Formular ein Kontextmenü angezeigt werden soll.

''Formular öffnen
DoCmd.OpenForm "frmLiteraturliste"
''Formular-Kontextmenü zuweisen
Forms!frmLiteraturliste.ShortcutMenuBar = "scmenLiteraturliste"
''Listenfeld-Kontextmenü zuweisen
Forms!frmLiteraturliste!lstPositionen.ShortcutMenuBar = "scmenListenpositionen"

Quellcode 1

''Formular versteckt öffnen
DoCmd.OpenForm "frmLiteraturliste", acDesign, , , , acHidden
''Formular-Kontextmenü zuweisen
Forms!frmLiteraturliste.ShortcutMenuBar = "KontextmenüListenpositionen"
''Listenfeld-Kontextmenü zuweisen
Forms!frmLiteraturliste!lstPositionen.ShortcutMenuBar = "KontextmenüListenpositionen"
DoCmd.Save acForm, "frmLiteraturliste"
DoCmd.OpenForm "frmLiteraturliste", acNormal

Quellcode 2

Auf oberster Ebene können Sie der kompletten Datenbank ein Standard-Kontextmenü zuweisen, das dann überall dort verwendet wird, wo kein individuelles Kontextmenü vorhanden ist.

Um ein Kontextmenü für die Datenbank einzustellen, wählen Sie den Menübefehl Extras/Start. Im Dialog Start können Sie dann über das Kombinationsfeld Kontextmenüleiste die entsprechende Symbolleiste auswählen.

Zuweisung per VBA

Wenn Sie einem Objekt ein Kontextmenü mittels VBA temporär zuweisen möchten, verwenden Sie die Eigenschaft ShortcutMenuBar. Als Beispiel soll Quellcode 1 dienen, mit dem einem Formular und einem Listenfeld jeweils ein Kontextmenü zugewiesen wird.

Sobald Sie das Formular schließen, sind die per VBA gemachten Einstellungen wieder aufgehoben. Soll die zugewiesene Kontextmenüleiste dauerhaft gespeichert werden, müssen Sie das Formular in der Entwurfsansicht öffnen, die Eigenschaft einstellen und das Formular über die Anweisung DoCmd.Save speichern. Im Beispiel (s. Quellcode 2) wird das Formular versteckt geöffnet, sodass für den Benutzer die änderungen nicht sichtbar sind.

Um der Datenbank eine Kontextmenüleiste zuzuweisen, verwenden Sie das Application-Objekt. Die folgende Anweisung weist der aktuellen Datenbank die Kontextmenüleiste scmenApplication zu.

Application.ShortcutMenuBar = _    "scmenApplication"

Funktion der Kontextmenübefehle

Die Befehle von Kontextmenüs sind identisch mit denen von Symbolleisten. Sie können in Kontextmenüs folglich entweder bereits eingebaute Befehle wie Bearbeiten oder Kopieren verwenden oder eigene Befehle vom Typ Benutzerdefiniert hinzufügen.

Damit der Menübefehl genau die Anweisungen ausführt, die Sie für ein bestimmtes Objekt benötigen, können Sie in den Eigenschaften des Befehls im Kombinationsfeld Bei Aktion ein Makro auswählen oder einen Funktionsaufruf eintragen.

Bei dem Funktionsaufruf muss es sich um eine öffentliche Funktion (Public Function) handeln. Der Aufruf erfolgt in der Form

=Funktionsname()

Bild 2: Auswählen der Aktion eines Kontextmenübefehls

Public Function Positionöffnen()
    Dim LiteraturID As Long
    LiteraturID = Nz(Forms!frmLiteraturliste!lstPositionen.Column(2), 0)
    If LiteraturID <> 0 Then
        Literaturöffnen LiteraturID
    End If
End Function

Quellcode 3

Das folgende Beispiel bezieht sich auf die Literaturdatenbank dieser Ausgabe und zeigt anhand der Literaturliste, wie Sie Kontextmenüs sinnvoll einsetzen können.

Es soll für die Listenpositionen ein Kontextmenü erstellt werden, mit dem die Positionen geöffnet und gelöscht werden können (siehe Bild 1).

VBA-Funktionen programmieren

Im ersten Schritt programmieren Sie dazu die Funktionen zum öffnen und Löschen einer Listenposition.

In der Beispieldatenbank Literaturmanager.mdb finden Sie die Funktionen Positionöffnen (s. Quellcode 3) und PositionLöschen (s. Quellcode 4) im Modul modLiteraturliste.

Die Funktion Positionöffnen ermittelt die LiteraturID des aktuell in der Liste markierten Eintrags und öffnet dann das Formular frmLiteratur über die bereits besprochene Prozedur Literaturöffnen.

Die Funktion PositionLöschen ermittelt den gerade markierten Eintrag im Listenfeld und entfernt diesen dann mittels einer Löschabfrage aus der Tabelle tblLiteraturlistenPositionen.

Kontextmenü anlegen

Public Function PositionLöschen()
    Dim LiteraturPositionID As Long
    Dim db As Database
    Dim SQL As String
    LiteraturPositionID = Nz(Forms!frmLiteraturliste!lstPositionen, 0)
    If LiteraturPositionID <> 0 Then
        If MsgBox("Möchten Sie die Position wirklich löschen", _            vbQuestion + vbYesNo, "Position löschen") = vbYes Then
            SQL = "DELETE * FROM tblLiteraturlistenPositionen " _                & "WHERE LiteraturlistenPositionID=" & LiteraturPositionID
            Set db = CurrentDb()
            db.Execute SQL
            UpdatePositionen
        End If
    End If
End Function

Quellcode 4

Bild 3: Anlegen einer neuen Symbolleiste

Nachdem Sie die benötigten Funktionen programmiert haben, können Sie das Kontextmenü anlegen. Bei einem Kontextmenü handelt es sich um eine Symbolleiste vom Typ PopUp, die Sie wie jede andere Symbolleiste über den Dialog Anpassen konfigurieren.

Gehen Sie dazu in den folgenden Schritten vor:

  • Rufen Sie den Menübefehl Ansicht/Symbolleisten/Anpassen auf.
  • Klicken Sie im nun erscheinenden Menü auf die Schaltfläche Neu und geben Sie der Symbolleiste den Namen KontextmenüListenPositionen (siehe Bild 3).
  • Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar