Color scheme: Dark
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Access-Kontextmenüleiste in einem Raster verwenden

Access-Kontextmenüleiste in einem Raster verwenden

Geben Sie einem WklGrid, einer WklTreeList oder einem WklGantt die Befehle Ihrer Anwendung in seinem Kontextmenü – „Als erledigt markieren“, „Lieferschein drucken“ –, ohne Formularmodul und so, wie ein Access-Formular sie über seine Kontextmenüleiste erhält.

Voraussetzungen: WKL Forms Object Library 1.28 oder höher.

Lösungsüberblick

Access-Formulare beziehen ihr Kontextmenü aus der Eigenschaft ShortcutMenuBar: dem Namen einer Popup-Befehlsleiste, deren Einträge eine Funktion (=Function()) oder ein Makro aufrufen. Access bietet diese Eigenschaft nur für seine eigenen Steuerelemente an. Die WKL-Steuerelemente haben eine gleichnamige Eigenschaft: Die Einträge der genannten Leiste erscheinen im Kontextmenü des Steuerelements, standardmäßig nach den eingebauten Einträgen (MenuPlacement). Wählt der Benutzer einen Eintrag, führt das Steuerelement dessen Aktion so aus, wie Office es tut. Die Funktion findet das Steuerelement über Screen.ActiveControl und den Datensatz, auf dem das Menü geöffnet wurde, über ContextKey (ContextColumn für die Spalte, ContextView für eine Detailansicht).

Nichts davon braucht das Formularmodul: Die Leiste legt ein Standardmodul beim Start an, die Eigenschaft wird in der Entwurfsansicht gesetzt.

Umsetzung

  1. Legen Sie die Leiste beim Start der Anwendung in einem Standardmodul an, und rufen Sie die Funktion aus dem Makro AutoExec auf (Aktion AusführenCode / RunCode, CreateOrderMenu()):

    Public Function CreateOrderMenu()
        On Error Resume Next
        CommandBars("mnuBestellungen").Delete
        On Error GoTo 0
        With CommandBars.Add("mnuBestellungen", 5, False, True) ' 5 = msoBarPopup, temporary
            With .Controls.Add(1)                             ' 1 = msoControlButton
                .Caption = "Als &erledigt markieren"
                .OnAction = "=MarkOrderDone()"
            End With
            With .Controls.Add(1)
                .Caption = "&Lieferschein drucken"
                .OnAction = "=PrintDeliveryNote()"
                .BeginGroup = True
            End With
        End With
    End Function
  2. Schreiben Sie im selben Standardmodul die Funktionen, die die Einträge aufrufen:

    Public Function MarkOrderDone()
        Dim grid As Object
        Set grid = Screen.ActiveControl.Object
        If IsNull(grid.ContextKey) Then Exit Function      ' opened on a group row
        CurrentDb.Execute "UPDATE tblBestellungen SET Erledigt = True WHERE BestellNr = " & grid.ContextKey, dbFailOnError
        grid.Requery
    End Function
     
    Public Function PrintDeliveryNote()
        DoCmd.OpenReport "rptLieferschein", acViewPreview, , "BestellNr = " & Screen.ActiveControl.Object.ContextKey
    End Function
  3. Öffnen Sie das Formular in der Entwurfsansicht, markieren Sie das Raster, und geben Sie mnuBestellungen in ShortcutMenuBar ein (Eigenschaftenblatt, Registerkarte Andere, oder Designerseite Verhalten, Abschnitt Kontextmenü). Wählen Sie mit MenuPlacement, ob die Einträge nach den eingebauten (Standardwert), davor, allein oder gar nicht erscheinen.

Hinweise

  • Die Leiste wird bei jedem Öffnen des Menüs gelesen. Ändern Sie einen Eintrag per Code – CommandBars("mnuBestellungen").Controls(2).Enabled = False –, zeigt das nächste Menü die Änderung.
  • Angezeigt werden die sichtbaren Schaltflächen und Untermenüs der Leiste mit Beschriftung, ShortcutText, Aktivierung, Häkchen (State) und Trennlinie (BeginGroup). Kombinationsfelder, Eingabefelder und Bilder einer Leiste werden nicht angezeigt.
  • Detailansichten eines WklGrid zeigen dieselben Einträge. ContextKey enthält dann den Schlüssel des Detaildatensatzes und ContextView den Namen der Detailansicht; lesen Sie beide am Hauptraster (Screen.ActiveControl ist das Hauptraster).
  • Ein Eintrag, dessen Funktion nicht existiert, zeigt wie ein Eintrag einer Access-Leiste die Meldung von Access, dass der Ausdruck den Namen einer Funktion enthält, die Access nicht finden kann; prüfen Sie den Namen in OnAction. Ein Fehler, den die Funktion nicht behandelt, zeigt das Laufzeitfehler-Dialogfeld von VBA; geben Sie der Funktion daher eine Fehlerbehandlung.
  • Die Beschriftungen der Einträge sind Ihre Texte; die eingebauten Einträge folgen der Sprache der Komponenten.
  • Mit einem Formularmodul können Sie das Menü in BeforeContextMenu je Datensatz anpassen oder statt einer Leiste Einträge mit AddMenuItem hinzufügen (Einträge zum Kontextmenü hinzufügen).

Verwandte Themen

de/wiki/msaccess/comctl/how-to/use-an-access-shortcut-menu-bar.txt · Last modified: by Wolfgang van der Stille