【问题标题】:Populate Treeview with data from string split with "\"使用“\”拆分的字符串中的数据填充 Treeview
【发布时间】:2017-09-26 04:55:20
【问题描述】:

我有一个大列表,其中包含类似的值

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 中填充树视图控件

有人可以帮我解决这个问题吗?请。提前致谢。

【问题讨论】:

  • Re-asking your question 绝对不会帮你得到任何答案。尽管存在例外,但 Stack Overflow 不是编码服务。向我们展示您迄今为止的尝试。
  • 基本上你需要做的是在\ 处拆分字符串,保留第一项(索引0),然后将每个拆分条目添加为每个前一个节点下的子节点。
  • 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)) 下一个

标签: vb.net treeview


【解决方案1】:

你需要两个循环。一个循环用于列表,第二个循环遍历由斜线分隔的项目。棘手的部分是区分属于 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

【讨论】:

  • 嗨 LarsTech,感谢您的回答......它只是工作。我不知道为什么人们急于将我的问题标记为重复。
  • @Smith :因为它或多或少是重复的,如果您需要特定帮助,您必须始终向我们展示您尝试过的内容? (现在你已经完成了,这很好:))——你看,你的尝试与 Stack Overflow 的 specific guidelines 相当。仅仅asking for code 通常过于宽泛,因为有太多可能的方法可以解决问题。
【解决方案2】:

我也找到了答案,但我的代码给出了不正确的结果......并且@LarsTech 代码完美运行。再次感谢 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

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多