Vb.net 使用“字符串拆分”中的数据填充Treeview\&引用;

Vb.net 使用“字符串拆分”中的数据填充Treeview\&引用;,vb.net,treeview,Vb.net,Treeview,我有一个大列表,其中包含如下值 List(0) = "Drive\First1\Folder2\Folder3" List(1) = "Drive\Second2" List(2) = "Drive\SubFolder1\ChildSubFolder" Dim List = Split("Drive\First1\Folder2\Folder3", "\") ParentNode = TreeView1.Nodes.Add(List(0)) For x = 1

我有一个大列表,其中包含如下值

List(0) = "Drive\First1\Folder2\Folder3"

List(1) = "Drive\Second2"

List(2) = "Drive\SubFolder1\ChildSubFolder"

    Dim List = Split("Drive\First1\Folder2\Folder3", "\")

    ParentNode = TreeView1.Nodes.Add(List(0))

    For x = 1 To List.Count - 1
        ParentNode.Nodes.Add(List(x))
    Next
我对如何在vb.net中填充treeview控件感到非常困惑

有人能帮我吗?请提前谢谢


您需要两个循环。一个循环用于列表,第二个循环用于遍历由斜杠分隔的项目。棘手的部分是区分属于TreeView控件本身的“根节点”和属于该集合中父节点的“子节点”

For Each item As String In List
  Dim activeNode As TreeNode = Nothing
  Dim nodeItems As TreeNodeCollection = Nothing
  Dim subItems() As String = item.Split("\"c)
  For i As Integer = 0 To subItems.Length - 1
    nodeItems = If(i = 0, TreeView1.Nodes, activeNode.Nodes)
    If nodeItems.ContainsKey(subItems(i)) Then
      activeNode = nodeItems(subItems(i))
    Else
      activeNode = nodeItems.Add(subItems(i), subItems(i))
    End If
  Next
Next
一旦弄明白了这一点,只需检查节点是否已经存在,如果已经存在,则使用该节点,否则,将其添加到集合中

For Each item As String In List
  Dim activeNode As TreeNode = Nothing
  Dim nodeItems As TreeNodeCollection = Nothing
  Dim subItems() As String = item.Split("\"c)
  For i As Integer = 0 To subItems.Length - 1
    nodeItems = If(i = 0, TreeView1.Nodes, activeNode.Nodes)
    If nodeItems.ContainsKey(subItems(i)) Then
      activeNode = nodeItems(subItems(i))
    Else
      activeNode = nodeItems.Add(subItems(i), subItems(i))
    End If
  Next
Next

我也找到了答案,但我的代码给出了不正确的结果。。。@LarsTech代码工作得很好。再次感谢拉斯特

    Dim List(3) As String
    List(0) = "Drive\First1\Folder2\Folder3"
    List(1) = "Drive\Second2"
    List(2) = "Drive\Second3\Folder4"
    List(3) = "xDrive\Folder4\Folder5"

    For Each ListItem In List
        Dim Folders() = Split(ListItem, "\")

        For i = 1 To Folders.Count - 1

            Dim pNode = TreeView1.Nodes.Find(Folders(i - 1), True)

            If pNode.Count = 0 Then
                Dim pNode1 = TreeView1.Nodes.Add(Folders(i - 1), Folders(i - 1))
                pNode1.Nodes.Add(Folders(i), Folders(i))
            Else
                If pNode(0).Nodes.Find(Folders(i), True).Count = 0 Then
                    pNode(0).Nodes.Add(Folders(i), Folders(i))
                End If
            End If
        Next
    Next

绝对不会帮你得到任何答案。尽管存在异常,但堆栈溢出不是编码服务。向我们展示您迄今为止所做的尝试。基本上,您需要做的是在
\
处拆分字符串,保留第一项(索引0),然后将每个拆分项作为子节点添加到每个前一个节点下。Dim List=split(“Drive\First1\Folder2\Folder3”,“\”)ParentNode=TreeView1.Nodes.add(列表(0))对于x=1的List.Count-1 ParentNode.Nodes.Add(List(x))下一个Hi-LarstTech可能的副本,感谢您的回答。。。它只是工作。我不知道为什么人们急着把我的问题标为重复的。@Smith:因为它或多或少是重复的,如果你需要特别的帮助,你必须总是向我们展示你的尝试?(现在您已经这样做了:)--您看到了,显示您的尝试完全是堆栈溢出。“仅仅”通常过于宽泛,因为有太多可能的方法来解决这个问题。