Seitenleiste mit Karten aufbauen
Zeigen Sie mehrere Unterformulare an einer Stelle eines WklDockLayout an – zum Beispiel eine Seitenleiste rechts mit
den Karten „Eigenschaften“ und „Memo“ – und lassen Sie den Benutzer wie in einem Office-Aufgabenbereich über Register
zwischen ihnen wechseln.
Voraussetzungen: WKL Forms Object Library 1.37 oder höher.
Lösungsüberblick
Bereiche mit derselben Gruppe in Panes (Name=Zone:Group) bilden eine Registergruppe: Sie teilen sich unter einer
Registerleiste einen Platz in ihrer Zone, und es wird jeweils eine Karte angezeigt. Die Gruppe wird als ein Bereich in
der Größe geändert, eingeklappt und gezogen. PaneCaption legt den Text eines Registers fest, GroupPane liest oder
setzt die angezeigte Karte, und AfterTabChange meldet jeden Wechsel – durch den Benutzer, durch Code oder beim Öffnen
des Formulars mit der gemerkten Karte des Benutzers. So lädt ein Formular den Inhalt einer Karte an einer einzigen
Stelle.
Umsetzung
- Zeichnen Sie in der Entwurfsansicht die Unterformulare der Seitenleiste (
sfProps,sfMemo) übereinander an den rechten Rand des Layouts; Größe und Lage ergeben sich aus der ersten Karte. - Öffnen Sie den Designer des Layouts (
[...]in der Zeile Benutzerdefiniert), Seite Bereiche, und tragen Sie die Karten mit derselben Gruppe ein: Zone Rechts, GruppeSeiteund den Registertext in der Spalte Register (Eigenschaften,Memo). Die Vorschau zeigt die Registerleiste; die angezeigte Karte nennt alle Karten. Klicken Sie auf OK, und speichern Sie das Formular.
Dasselbe per Code:
' Design view of frmAdmin is open.
With Forms!frmAdmin!Layout1.Object
.Panes = "lstKunden=Left; sfProps=Right:Seite; sfMemo=Right:Seite; sfHaupt=Fill"
.PaneCaption("sfProps") = "Eigenschaften"
.PaneCaption("sfMemo") = "Memo"
End With
Laden Sie den Inhalt einer Karte, wenn sie angezeigt wird, und die erste Karte beim Öffnen des Formulars:
Private Sub Form_Load()
' The card shown when the form opens raises no AfterTabChange (Access's tab control raises no
' Change either): load it here.
LoadCard Me!Layout1.Object.GroupPane("Seite")
End Sub
Private Sub Layout1_AfterTabChange(ByVal Group As String, ByVal Pane As String, ByVal Reason As Long)
' Every switch: chosen by the user (wtcUser), by code - GroupPane, Reset, Layout - (wtcCode),
' or the user's remembered card restored when the form opened (wtcRestore).
LoadCard Pane
End Sub
Private Sub LoadCard(ByVal pane As String)
If pane = "sfMemo" And Me!sfMemo.SourceObject = "" Then Me!sfMemo.SourceObject = "frmMemo"
End Sub
Hinweise
- Die Karte, die beim Öffnen des Formulars angezeigt wird, löst kein
AfterTabChangeaus: die erste Karte der Gruppe oder die gemerkte Karte des Benutzers, wenn sie die erste ist. Nur eine gemerkte Karte, die nicht die erste ist, wird gemeldet, und zwar mitwtcRestore. Code, der Karten bei Bedarf lädt, muss die angezeigte Karte deshalb auch inForm_Loadladen, sonst bleibt sie leer. BeforeTabChangetritt nur bei Wechseln durch den Benutzer ein. Setzen SieCancel, um die angezeigte Karte zu behalten, etwa solange ein Datensatz darauf nicht gespeichert werden kann.GroupPaneper Code löstAfterTabChange(wtcCode) aus, aber keinBeforeTabChange.- Hat die alte Karte den Fokus, verschiebt der Wechsel ihn in die neue Karte, weil Access das Steuerelement mit dem Fokus nicht ausblenden lässt. Beim Verlassen eines Unterformulars wird dessen geänderter Datensatz gespeichert, wie bei einem Klick in ein anderes Unterformular; lehnt die Tabelle den Datensatz ab, zeigt Access seine Meldung an.
- Alle Karten einer Gruppe brauchen dieselbe Zone; eine Gruppe kann auch den restlichen Platz füllen (
Fill). Die Registerleiste liegt oben am Platz der Gruppe und verwendet die Systemfarben, sodass ein hoher Kontrast den Einstellungen von Windows folgt. - Tastatur: Die Registerleiste ist im Layout ein Tabstopp vor der Trennleiste der Gruppe. Die Nach-links- und die Nach-rechts-Taste zeigen die benachbarte Karte, Pos1 und Ende die erste und die letzte. UI Automation stellt ein Tab mit dem Namen der Gruppe und je Karte ein TabItem dar. Strg+Tab wird nicht verwendet: In einem Unterformular verlässt Access damit das Unterformular.
- Die angezeigte Karte gehört zur Anordnung des Benutzers (
AutoSaveLayout) und kehrt beim nächsten Öffnen des Formulars zurück.Resetkehrt in jeder Gruppe zur ersten Karte zurück und meldet jede Gruppe, die dabei wechselt, mitwtcCode.