Allen Seiten denselben Kopfbereich geben
Geben Sie einer Anwendungsshell einen gemeinsamen Kopfbereich für alle ihre Seiten – Titel, Untertitel, die Befehle der Seite und einen Status –, statt Schaltflächen und Bezeichnungsfeldern, die jede Seite oder die Shell selbst platziert und ausmisst.
Voraussetzungen: WKL Forms Object Library 1.46 oder höher.
Lösungsüberblick
- Eine
WklActionBarin der Shell, über dem Unterformular, das die Seiten zeigt (sfPage). - Die Shell setzt die Befehle der Seite, wenn sie eine Seite anzeigt: ein JSON-Text je Seite oder
ClearCommandsundAddCommand. - Eine einzige Ereignisprozedur führt jeden Befehl aus:
CommandClick(Key)übergibt den Schlüssel an die Prozedur, die weiß, was jeder Schlüssel bewirkt. - Der Zustand des Datensatzes aktiviert und deaktiviert Befehle anhand ihres Schlüssels, zum Beispiel nach
CommandStateChangeder Liste.
Umsetzung
Im Modul des Shell-Formulars frmShell (Befehlsleiste barShell, Seiten-Unterformular sfPage):
Option Compare Database
Option Explicit
Public Sub ShowPage(ByVal pageForm As String)
Me!sfPage.SourceObject = pageForm
With Me!barShell.Object
.Caption = Me!sfPage.Form.Caption
.Subtitle = Nz(Me!sfPage.Form.Tag, "")
.ClearCommands
Select Case pageForm
Case "frmPersonen"
.AddCommand "neu", "&Neu", "E710", wcpStandard, "^N"
.AddCommand "bearbeiten", "Bearbei&ten", "E70F"
.AddCommand "loeschen", "&Löschen", "E74D"
.AddCommand "ausstellen", "&Schlüssel ausstellen …", "E8D7", wcpPrimary
.AddCommand "ausstellen-test", "Testschlüssel ausstellen …", "", , , "ausstellen"
.AddCommand "sperren", "Schlüssel s&perren …", "", wcpMenu
.AddCommand "spalten", "S&palten zurücksetzen", "", wcpMenu, , , , True
End Select
.AddCommand "export", "E&xportieren …", "EDE1", wcpRight
.AddCommand "refresh", "&Aktualisieren", "E72C", wcpRight, "{F5}"
End With
End Sub
Private Sub barShell_CommandClick(ByVal Key As String)
Select Case Key
Case "neu": Me!sfPage.Form!grdList.Object.NewRecord
Case "bearbeiten": Me!sfPage.Form!grdList.Object.EditSelected
Case "loeschen": Me!sfPage.Form!grdList.Object.DeleteSelected
Case "refresh": Me!sfPage.Form!grdList.Object.Requery
Case "export": Me!sfPage.Form!grdList.Object.ShowExportDialog
Case Else: RunPageCommand Key
End Select
End Sub
' Called by the page after its list changed what can be done (CommandStateChange of WklGrid).
Public Sub ListStateChanged(ByVal grid As Object)
With Me!barShell.Object
.CommandEnabled("neu") = grid.CanAdd
.CommandEnabled("bearbeiten") = grid.CanEdit
.CommandEnabled("loeschen") = grid.CanDelete
End With
End Sub
Private Sub RunPageCommand(ByVal Key As String)
' The commands only this page has, for example opening a dialog.
End Sub
Hinweise
- Eine Shell, die für jede Seite einen eigenen Befehlssatz führt, kann jeden als JSON-Text speichern und mit
.Commands = textzuweisen; ein fehlerhafter Text wird als Ganzes abgelehnt, und die Befehlsleiste behält ihre Befehle. - Das Statusfeld zeigt, was die gesamte Anwendung gerade tut, zum Beispiel
.StatusText = "aktualisiert " & Format(Now, "hh:nn:ss")mit.StatusKind = wskOk. - Führen Sie jede Tastenkombination nur einmal auf: in der Befehlsleiste (
Shortcuteines Befehls) oder inWklDockLayout.ShortcutKeys, nicht in beiden. - Das Band der Befehlsleiste übernimmt
BackColorundForeColor; die Befehlszeile behält die Fensterfarbe, sodass die Schaltflächen auf einem dunklen Band lesbar bleiben. - Per Code in der Formularansicht gesetzte Befehle kennzeichnen das Formular nicht als geändert; in der Entwurfsansicht gesetzte Befehle (per Code oder im Designer) werden mit dem Formular gespeichert.
Verwandte Themen
de/wiki/msaccess/comctl/how-to/give-every-page-the-same-header.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille