Du kannst nur einen Knoten öffnen,
der auch Unterknoten hat.
In meinem Beispiel besitzt D-C-E-B keine Unterknoten
und kann deshalb nicht geöffnet werden !!
In solchen Fällen kannst Du die Hierarchie bis
zum Parent-Knoten öffnen.
Im Prinzip gibt es zwei Möglichkeiten, die
Knotenlinie zu einem bestimmten Knoten zu öffnen.
Du speicherst entweder bereits beim Erstellen
der Treeview-Knoten eine Referenz zu dem gewünschen
Ini-Knoten oder du nutzt die Find-Methode der Treenode
Klasse.
Im Beispiel wird der Knoten D-C-E geöffnet (beide Versionen)
Public Class frmTreeviewDemo
Dim WithEvents trv As New TreeView With
{.Parent = Me, .Size = New Drawing.Size(200, 500)}
Dim WithEvents btnIni1 As New Button With
{.Parent = Me, .Left = 210, .Text = "Version1"}
Dim WithEvents btnIni2 As New Button With
{.Parent = Me, .Left = 210, .Text = "Version2", .Top = 40}
Dim IniPath As String
Dim IniNode As TreeNode
Private Sub frmTreeviewDemo_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.Size = New Size(300, 550)
IniPath = "DCE"
'Testdaten erstellen
Dim tn1, tn2, tn3, tn4 As TreeNode
For i As Integer = 65 To 70
tn1 = trv.Nodes.Add(Chr(i), Chr(i))
For k As Integer = 65 To 70
tn2 = tn1.Nodes.Add(Chr(i) & Chr(k), Chr(k))
For l As Integer = 65 To 70
tn3 = tn2.Nodes.Add(Chr(i) & Chr(k) & Chr(l), Chr(l))
If tn3.Name = IniPath Then
IniNode = tn3 'Referenz speichern
End If
For m = 65 To 70
tn3.Nodes.Add(Chr(m))
Next
Next l
Next k
Next i
End Sub
Private Sub trv_BeforeExpand(sender As Object,
e As TreeViewCancelEventArgs) Handles trv.BeforeExpand
If e.Node.Parent Is Nothing Then
trv.CollapseAll()
Else
For Each tn As TreeNode In e.Node.Parent.Nodes
tn.Collapse()
Next
End If
End Sub
Private Sub btnIni1_Click(sender As Object,
e As EventArgs) Handles btnIni1.Click
OpenNode(IniNode)
End Sub
Private Sub btnIni2_Click(sender As Object,
e As EventArgs) Handles btnIni2.Click
Dim nd() As TreeNode = trv.Nodes.Find(IniPath, True)
If nd.Length > 0 Then OpenNode(nd(0))
End Sub
Private Sub OpenNode(nd As TreeNode)
If nd Is Nothing Then Exit Sub
Dim ndl As New List(Of TreeNode)
With ndl
.Add(nd)
'Knotenlinie als Liste speichern
While .item(.Count - 1).Parent IsNot Nothing
.Add(.Item(.Count - 1).Parent)
End While
'Knotenlinie öffnen
For i As Integer = .Count - 1 To 0 Step -1
.Item(i).Expand()
Next i
End With
End Sub
End Class
Beitrag wurde zuletzt am 19.03.19 um 21:54:52 editiert. |