Color scheme: Light
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Eigene Tastenkombinationen in einer Anwendungsshell behandeln

Eigene Tastenkombinationen in einer Anwendungsshell behandeln

Geben Sie einer Anwendungsshell – einem Hauptformular, dessen Bereiche ein WklDockLayout anordnet, mit einer WklNavBar und einem Unterformular, das die Seiten zeigt – eigene Tastenkombinationen (Strg+1 und Strg+2 zum Wechseln der Seite, Strg+N für einen neuen Datensatz, F5 zum erneuten Lesen), die überall funktionieren, wo der Fokus gerade ist: in einem Textfeld einer Seite, in einem WklGrid auf einer Seite oder in der Shell selbst.

Voraussetzungen: WKL Forms Object Library 1.45 oder höher für ShortcutKeys; der Weg über Weiterleitung am Ende funktioniert ab 1.24.

Lösungsüberblick

  • KeyPreview der Shell genügt nicht. Tasten, die in einem Unterformular gedrückt werden, erreichen nur das Formular dieses Unterformulars und seine Steuerelemente; Form_KeyDown der Shell sieht sie nicht.
  • Das Layout überwacht das ganze Formular. WklDockLayout.ShortcutKeys listet die Kombinationen in der Schreibweise des AutoKeys-Makros auf (^1;^2;^N;{F5}). Das Layout sieht jede Taste, die der Benutzer in seinem Formular drückt, einschließlich der Unterformulare, bevor Access und das Steuerelement mit dem Fokus sie sehen, und löst für eine aufgeführte Taste Shortcut aus.
  • Eine einzige Stelle entscheidet. Die Prozedur Shortcut der Shell führt den Befehl aus und setzt Handled = True; die Taste erreicht dann niemanden sonst. Eine Taste, bei der Handled = False bleibt, geht weiter, als hätte das Layout sie nicht angesehen.

Umsetzung

Im Modul des Shell-Formulars frmShell (Layout layShell, Seiten-Unterformular sfPage):

Option Compare Database
Option Explicit
 
Private Sub Form_Load()
    Me!layShell.Object.ShortcutKeys = "^1;^2;^N;{F5}"
End Sub
 
Private Sub layShell_Shortcut(ByVal Key As String, Handled As Boolean)
    Select Case Key
        Case "^1"
            Me!sfPage.SourceObject = "frmSitzungen"
            Handled = True
        Case "^2"
            Me!sfPage.SourceObject = "frmZertifikate"
            Handled = True
        Case "^N"
            Me!sfPage.Form!grdListe.Object.NewRecord
            Handled = True
        Case "{F5}"
            Me!sfPage.Form!grdListe.Object.Requery
            Handled = True
    End Select
End Sub

ShortcutKeys lässt sich auch in der Entwurfsansicht setzen (Eigenschaftenblatt, Registerkarte Andere); die Einstellung wird mit dem Formular gespeichert.

Hinweise

  • Key wird immer in derselben festen Form geschrieben, unabhängig von der Schreibweise in ShortcutKeys: Zusatztasten in der Reihenfolge ^+%, ein Buchstabe als Großbuchstabe (^N, +{F2}, {ESC}).
  • Ein Buchstabe oder eine Ziffer ohne Strg (^) oder Alt (%) wird beim Setzen der Liste abgelehnt: Die Kombination würde beim Tippen ausgelöst.
  • Wählen Sie Kombinationen, die die Steuerelemente nicht selbst brauchen (das Raster verwendet unter anderem die Pfeiltasten, Eingabetaste, Entf, F2, Strg+C, Strg++ und Strg+-; die Tasten jedes Steuerelements stehen in seiner Referenz). Eine aufgeführte Taste wird zuerst Shortcut angeboten, auch wenn ein Steuerelement sie verwenden würde.
  • WklNavBar schaltet sich selbst mit Strg+B um (ToggleShortcut), und F6 wechselt zwischen den Bereichen des Layouts; beides funktioniert neben ShortcutKeys weiter.
  • Ein modales Dialogfeld oder ein Popup-Formular im Vordergrund erhält seine Tasten wie gewohnt; das Layout meldet nur Tasten seines eigenen Formulars.

Ohne WklDockLayout: Weiterleitung aus jeder Seite

Eine Shell ohne Layout lässt jede Seite ihre Tasten weiterleiten. Das Seitenformular setzt KeyPreview auf Ja und gibt Form_KeyDown – und das KeyDown eines WKL-Steuerelements mit dem Fokus – an eine öffentliche Funktion der Shell weiter, die zurückgibt, ob sie die Taste übernommen hat:

' Module of a page form with the grid grdKunden.
Private Sub Form_Load()
    Me.KeyPreview = True
End Sub
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If Forward(KeyCode, Shift) Then KeyCode = 0
End Sub
 
Private Sub grdKunden_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
    If Forward(KeyCode, Shift) Then KeyCode = 0
End Sub
 
Private Function Forward(ByVal KeyCode As Integer, ByVal Shift As Integer) As Boolean
    On Error Resume Next
    If CurrentProject.AllForms("frmShell").IsLoaded Then
        Forward = Forms!frmShell.HandleShortcut(KeyCode, Shift)
    End If
End Function

HandleShortcut in der Shell vergleicht KeyCode und Shift (zum Beispiel KeyCode = vbKeyN And Shift = acCtrlMask) und gibt für eine behandelte Taste True zurück.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/handle-shortcuts-in-a-shell.txt · Last modified: by Wolfgang van der Stille