Ich erstelle ein Formular in VB.net, das ein TreeView enthält. Diese TreeView ist mit erweiterbaren übergeordneten Knoten und entsprechenden untergeordneten Knoten gefüllt. Wenn der Benutzer das Programm ausführt, können sie alle gewünschten Knoten erweitern. Gibt es eine Möglichkeit, programmgesteuert zu speichern, welche Knoten erweitert wurden, damit das nächste Mal das Formular geladen wird, bleiben diese Knoten erweitert? Ich brauche nicht notwendigerweise codierte Beispiele (obwohl sie nützlich sein können), nur eine allgemeine Vorstellung von den Befehlen/Steuerungen/Logik, die im Programm verwendet werden sollen. Vielen Dank im Voraus!Vb.net Speichern, welche Knoten in TreeView erweitert wurden
Antwort
Hier sind einige grundlegende Ideen, um Ihre Implementierung zu führen:
eine Liste erstellen Überblick über die Knoten zu halten, die derzeit erweitert werden:
Private _ExpandedNodeList As New List(Of String)
Set-up zwei Event-Handler die AfterCollapse zu verfolgen und AfterExpand Ereignisse der TreeView - diese passieren, wenn ein Benutzer verschiedene Teile der Struktur öffnet/schließt. Der Trick dabei ist, dass die Event-Handler nur den Tag-Wert des Knotens hinzufügen und entfernen, der eine Zeichenfolge ist, die Sie beim Erstellen der Struktur auf dem Knoten gesetzt haben.
Private Sub TreeView_AfterCollapse(sender As Object, e As TreeViewEventArgs) Handles TreeView.AfterCollapse
If _ExpandedNodeList.Contains(e.Node.Tag.ToString) Then
_ExpandedNodeList.Remove(e.Node.Tag.ToString)
End If
End Sub
Private Sub TreeView_AfterExpand(sender As Object, e As TreeViewEventArgs) Handles TreeView.AfterExpand
If Not _ExpandedNodeList.Contains(e.Node.Tag.ToString) Then
_ExpandedNodeList.Add(e.Node.Tag.ToString)
End If
End Sub
Nehmen wir jetzt an, Sie haben einen Punkt in der Anwendung, wo Sie das TreeView in einem bestimmten Zustand wiederherstellen müssen. Sie können die Knoten in der TreeView rekursiv aufrufen und Expand für die in der Liste enthaltenen Knoten aufrufen.
Meine Implementierung sieht wie folgt aus:
Private Sub ShowVisibleNodes()
Dim Node As TreeNode
For Each ExpandedChildNodeName As String In _ExpandedNodeList
For Each RootNode As TreeNode In TreeView.Nodes
Node = NodeFromTagName(ExpandedChildNodeName, RootNode)
If Node IsNot Nothing Then
Node.Expand()
End If
Next
Next
End Sub
Private Function NodeFromTagName(ByVal NodeTagName As String, NodeToSearch As TreeNode) As TreeNode
Dim NextNode As TreeNode
'check input node
If NodeToSearch.Tag IsNot Nothing Then
If NodeToSearch.Tag.Equals(NodeTagName) Then
Return NodeToSearch
End If
End If
'check child nodes and recurse on intermediary nodes
For Each Node As TreeNode In NodeToSearch.Nodes
If Node.Tag IsNot Nothing Then
If Node.Tag.Equals(NodeTagName) Then
Return Node
End If
NextNode = NodeFromTagName(NodeTagName, Node)
If NextNode IsNot Nothing Then
Return NextNode
End If
End If
Next
Return Nothing
End Function
Hinweis: dieser Code nicht einfach garantiert arbeiten, indem sie in Ihrer Anwendung ablegen.
Zumindest müssen Sie sorgfältig überlegen, wie Sie Ihren Baum erstellen und ob Sie für jeden TreeNode einen Wert für das Tag festlegen.
Hoffentlich wird dies Ihnen den Anfang machen.
Wow, das ist großartig, danke! Und wenn ich meine 'ExpandedNodesList' erstelle, wird diese gespeichert und verfügbar sein, wenn der Benutzer die Anwendung das nächste Mal startet? –
Sie können die Liste definitiv speichern, aber Sie müssen es selbst tun. Wenn die Anwendung beispielsweise geschlossen wird, können Sie sie in eine Textdatei schreiben. Oder werfen Sie einen Blick in den Namespace System.Runtime.Serialization. –
Ich denke, der Downvote hier ist, weil ich "Speichern" nicht als "Speichern in Datei" interpretiert habe, sondern "Speichern" als "Sichere irgendwo" interpretiert? Vive le Pedanterie, was? –
- 1. VB.Net Wie Knoten in TreeView aktualisieren NodeMouseClick
- 2. VB.Net TreeView-Sekundärkennung
- 3. Treeview Dokument auf Knotenauswahl speichern
- 4. TreeView-Knoten-Hervorhebungsfarbe in C#
- 5. TreeView Manipulation, speichern hinzufügen usw.
- 6. Kopieren TreeView-Knoten
- 7. Bootstrap TreeView-Knoten traversing
- 8. Disable Treeview Knoten
- 9. Kendo TreeView Knoten abwählen
- 10. TreeView ausgewählten Knoten Problem
- 11. Scroll ausgewählten TreeView-Knoten in Ansicht
- 12. Kendo Treeview-Knoten Bearbeiten/Aktualisieren
- 13. cmd prompt hier in vb.net treeview
- 14. kendo treeview Datenquelle keine Kinder Elemente in Javascript debuggen, es sei denn, Knoten ist erweitert
- 15. MVVM mit TreeView - Knoten hinzufügen
- 16. WinForms TreeView - Indikator "Ausgewählter Knoten"
- 17. Einfache Objektbindung an Treeview-Knoten
- 18. TreeView lädt nur Top-Knoten
- 19. TreeView nur wenige Knoten erweitern
- 20. Zeilen zwischen Knoten in WPF TreeView
- 21. ASP.NET SiteMap-Knoten in TreeView-Steuerelement ausblenden
- 22. Wie speichere ich den Status der TreeView-Knoten (erweitert/reduziert) zwischen Postbacks?
- 23. Kann ich steuern, welche Knoten in einem WPF-TreeView auswählbar sind?
- 24. Silverlight TreeView erkennen Knotenerweiterung
- 25. Hinzufügen von Schaltflächen zu Bootstrap TreeView-Knoten
- 26. WPF C# Treeview Löschen & Focuse Knoten
- 27. TreeView, wie Knoten programmgesteuert erstellt werden
- 28. Treeview: Erste Ebene Knoten ohne Kinder
- 29. Treeview flackert?
- 30. Bind Gridview auf Treeview Knoten Klicken Sie
Es gibt ein paar Möglichkeiten. 'MySettings', speichern Sie in einer Datei mit binaryformatter, einer Datenbank, es liegt an Ihnen, wie Sie diese Daten speichern und zurück abrufen möchten. – Codexer
Ich stimme für das Schließen dieser Frage als Off-Topic ab, da es sich nicht um ein Programmierproblem, sondern eher um eine Empfehlung handelt. – Codexer