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:
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