Benutzung des TreeView unter VB.Net 2010

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Hastling.

    Benutzung des TreeView unter VB.Net 2010

    Hallo,

    ich versuche gerade unterVB.Net 2010 das TreeView Object mit Daten zu füllen.

    Dabei möchte ich das Array Group_Name_List(i, 2) as String als Datengrundlage verwenden.
    Group_Name_List(i, 2) hat dabei die Form "AAA\BBB\CCC\...". Jeder einzelne Eintrag stellt dabei eine Ebene dar, z.B.:

    AAA
    -BBB
    -CCC
    -.....

    Dabei kann die Tiefe mit fortlaufendem i unterschiedlich ausfallen.

    Ich möchte nun mit fortlaufenden i in der Schleife die Nodes schreiben und habe damit ein Problem. dass wenn die Pfadtiefe größer wird der Code den nächsten Eintrag auf die gleiche Pfadtiefe schreibt. Ich habe es versucht den letzten Knoten vorher zu selektieren, aber daran scheitert es bereits.


    Im folgen der Code


    Private Sub SelectBeams_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim i As Integer
    Dim j As Integer = 0
    Dim k As Integer = 0
    Dim l As Integer = 0
    Dim m As Integer = 0


    Dim group_depth As UInt16 = 1
    Dim temp_depth As UInt16 = 1
    Dim group_name_to_add() As String
    Dim group_name_to_add_string As String
    Dim group_name_to_add_string_temp As String

    Dim Node1 As TreeNode

    Node1 = TreeView1.Nodes.Add(Group_Name_List(1, 2))
    group_name_to_add_string_temp = Group_Name_List(1, 2)




    'Schleifenbeginn
    For i = 2 To No_Groups

    group_depth = Group_Name_List(i, 2).Split("\").GetLength(0) 'Gruppenebene ermitteln
    group_name_to_add = Group_Name_List(i, 2).Split("\") 'Gruppenliste in Array speichern
    group_name_to_add_string = group_name_to_add(group_name_to_add.Length - 1) 'letzten Gruppenname ermitteln



    If group_depth = temp_depth Then
    Node1 = TreeView1.Nodes.Add(group_name_to_add_string)
    TreeView1.SelectedNode = TreeView1.Nodes.Item(i - 1)
    End If


    'Code ab hier falsch

    If group_depth = temp_depth + 1 Then
    TreeView1.SelectedNode = TreeView1.Nodes(0)

    Dim test As TreeNode

    'ReDim test(100)
    'Me.TreeView1.SelectedNode = TreeView1.Nodes.Find(group_name_to_add_string_temp, True)
    test = TreeView1.Nodes.Find(TreeView1.Name = group_name_to_add_string_temp, True)


    Me.TreeView1.SelectedNode = test
    TreeView1.Select()


    'TreeView1.SelectedNode = TreeView1.Nodes.Index(1)
    TreeView1.SelectedNode.Nodes.Add(group_name_to_add_string)

    End If

    'Code bis hier falsch


    If group_depth = temp_depth - 1 Then
    TreeView1.Parent.Select()
    Node1 = TreeView1.Nodes.Add(group_name_to_add_string)
    ElseIf group_depth = temp_depth - 2 Then
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Nodes.Add(group_name_to_add_string)
    ElseIf group_depth = temp_depth - 3 Then
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    Node1 = TreeView1.Nodes.Add(group_name_to_add_string)
    ElseIf group_depth = temp_depth - 4 Then
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    Node1 = TreeView1.Nodes.Add(group_name_to_add_string)
    ElseIf group_depth = temp_depth - 5 Then
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    Node1 = TreeView1.Nodes.Add(group_name_to_add_string)
    ElseIf group_depth = temp_depth - 6 Then
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    TreeView1.Parent.Select()
    Node1 = TreeView1.Nodes.Add(group_name_to_add_string)
    End If

    temp_depth = group_depth
    group_name_to_add_string_temp = group_name_to_add_string

    Next

    TreeView1.ExpandAll()

    End Sub
    Ich hab mal ein kleines Bsp gemacht...

    Es gefällt mir zwar nicht sonderlich gut, weil ich denke, das es irgendwie eleganter gehen müsste, aber es funktioniert.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private arr(3) As String
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. arr(0) = "333/222/111/1000"
    4. arr(1) = "111/222/221/333/444"
    5. arr(2) = "AAA/BBB/CCC"
    6. arr(3) = "R/E/K/U/R/S/I/O/N"
    7. For Each element As String In arr
    8. Dim temp As String() = element.Split("/")
    9. Dim tn As TreeNode = New TreeNode(temp(0))
    10. If temp.Count > 1 Then Rec(tn, element.Substring(temp(0).Length + 1))
    11. TreeView1.Nodes.Add(tn)
    12. Next
    13. End Sub
    14. Private Sub Rec(ByVal n As TreeNode, ByVal T As String)
    15. Dim temp As String() = T.Split("/")
    16. Dim tn As TreeNode = New TreeNode(temp(0))
    17. n.Nodes.Add(tn)
    18. If temp.Count > 1 Then Rec(tn, T.Substring(temp(0).Length + 1))
    19. End Sub



    Gruß Mono
    Das ist meine Signatur und sie wird wunderbar sein!
    Hab es jetzt anders gelöst, wahrscheinlich nicht sehr effizient aber es funktioniert

    Private Sub SelectBeams_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim i As Integer
    Dim group_depth As UInt16 = 1
    Dim temp_depth As UInt16 = 1
    Dim group_name_to_add() As String
    Dim group_name_to_add_string As String
    Dim group_name_to_add_string_temp As String
    Dim Group_Name_List_temp As String = ""

    Dim TreeNode1 As TreeNode
    Dim TreeNode_to_find As TreeNode()

    TreeNode1 = TreeView1.Nodes.Add(Group_Name_List(1, 2), Group_Name_List(1, 2))
    group_name_to_add_string_temp = Group_Name_List(1, 2)
    Group_Name_List_temp = Group_Name_List(1, 2)

    For i = 2 To No_Groups
    group_depth = Group_Name_List(i, 2).Split("\").GetLength(0) 'Gruppenebene ermitteln
    group_name_to_add = Group_Name_List(i, 2).Split("\") 'Gruppenliste in Array speichern
    group_name_to_add_string = group_name_to_add(group_name_to_add.Length - 1) 'letzten Gruppenname ermitteln

    If group_depth = temp_depth Then
    TreeNode1 = TreeView1.Nodes.Add(Group_Name_List(i, 2), group_name_to_add_string)
    End If

    If group_depth = temp_depth + 1 Then
    TreeView1.SelectedNode = TreeView1.Nodes(0)
    TreeNode_to_find = TreeView1.Nodes.Find(Group_Name_List_temp, True)
    TreeView1.SelectedNode = TreeNode_to_find(0)
    TreeView1.SelectedNode.Nodes.Add(Group_Name_List(i, 2), group_name_to_add_string)
    TreeView1.Select()
    End If

    If group_depth < temp_depth Then
    Dim depth_difference As UInt16 = temp_depth - group_depth + 1
    For j = 1 To depth_difference
    TreeView1.Parent.Select()
    Next
    TreeNode1 = TreeView1.Nodes.Add(Group_Name_List(i, 2), group_name_to_add_string)
    End If


    temp_depth = group_depth
    group_name_to_add_string_temp = group_name_to_add_string
    Group_Name_List_temp = Group_Name_List(i, 2)

    Next

    TreeView1.ExpandAll()

    End Sub









    Danke für die Hilfe