Kontextmenüs

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).
  • 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).
  • Access im Unternehmen

    Unser exklusives Angebot für Dich!

    Access im Unternehmen
    13,25 € im Monat*

    (Gilt für den Abschluss eines Jahres-Abonnements im ersten Jahr, danach 189,-/Jahr)

    Hier geht’s weiter →

    Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.

    PayPal VISA Mastercard SEPA
    Kostenlos & unverbindlich

    Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

    Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

    In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

    Jetzt kostenloses Access-Audit anfordern →