Struktur durch Benutzer bearbeiten lassen
Erlauben Sie Benutzern, Knoten umzubenennen, hinzuzufügen, zu löschen, zu verschieben und zu kopieren, und prüfen Sie jede Änderung, bevor sie in die Datenquelle geschrieben wird.
Voraussetzungen: WKL Forms Object Library 1.23 oder höher.
Lösungsüberblick
Vier Eigenschaften schalten die Vorgänge ein: LabelEdit (Umbenennen), AllowAdditions (Hinzufügen),
AllowDeletions (Löschen) und AllowDragDrop (Verschieben und Kopieren). Alle sind standardmäßig ausgeschaltet, weil
sie Daten ändern. Mit AutoSave = True (Standard) wird jeder Vorgang in einer einzigen Transaktion geschrieben;
BeforeUpdate tritt vor jedem Schreiben ein und kann den gesamten Vorgang abbrechen.
Umsetzung
Im Eigenschaftenblatt (Registerkarte Andere) oder in Form_Load:
With Me!Tree1.Object
.LabelEdit = True ' F2 or click on the selected node
.AllowAdditions = True ' Insert: same level; Ctrl+Insert: below
.AllowDeletions = True ' Delete, with confirmation
.AllowDragDrop = True ' drag to move, Ctrl+drag to copy; Ctrl+X/C/V, Alt+Arrow keys
End With
Änderungen im Formularmodul prüfen:
Private Sub Tree1_BeforeUpdate(ByVal Key As Variant, ByVal Action As WklUpdateAction, Cancel As Integer)
If Action = wuaDelete And Not CurrentUserMayDelete() Then Cancel = True ' rolls back the whole operation
End Sub
Private Sub Tree1_AfterLabelEdit(ByVal Key As Variant, NewText As String, Cancel As Integer)
NewText = Trim$(NewText)
If Len(NewText) = 0 Then Cancel = True
End Sub
Private Sub Tree1_BeforeNodeAdd(ByVal ParentKey As Variant, NewKey As Variant, Text As String, Cancel As Integer)
Text = "Neue Region"
End Sub
CurrentUserMayDelete steht für Ihre eigene Berechtigungsprüfung.
Hinweise
- Das Kontextmenü bietet jeden Vorgang nur an, wenn seine Eigenschaft ihn zulässt.
- Löschen entfernt den gesamten Teilbaum;
BeforeDeletekann die Rückfrage unterdrücken (Confirm = False) oder das Löschen abbrechen. - Neue Schlüssel: Einen AutoWert vergibt Access. Für andere Schlüsselfelder schlägt das Steuerelement einen Schlüssel vor, den
BeforeNodeAddundBeforeNodeCopyändern können: Zahlen werden ab dem höchsten Schlüssel fortgezählt, Textschlüssel erhalten ein Suffix in der Sprache der Oberfläche (A1-Kopie,A1-Kopie2…), GUID-Schlüssel eine neue GUID. - Beim Kopieren werden Anlage- und mehrwertige Felder nicht kopiert.
- Ziehen funktioniert nur innerhalb desselben Steuerelements.
- In einer aus einem
Recordsetoder einer Datei geladenen Struktur wirken Änderungen nur auf die Anzeige.