2017-09-25 114 views
0

從字符串分割數據我有一個包含像填充樹視圖與「」

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控件非常困惑的大名單幫我解決這個問題?請。提前致謝。

enter image description here

+0

[_ **重新問你的問題** _](https://stackoverflow.com/q/46409872)絕對不會幫助你得到任何答案。雖然存在異常,但堆棧溢出不是一種編碼服務。向我們展示你到目前爲止所嘗試過的。 –

+0

基本上你需要做的是將字符串拆分爲'\',保留第一個項目(索引0),然後將每個拆分條目添加爲每個前一個節點下的子節點。 –

+0

昏暗列表=分段( 「驅動器\ First1 \ FOLDER2 \ Folder3」, 「\」) ParentNode = TreeView1.Nodes.Add(列表(0)) 對於x = 1至List.Count - 1個 ParentNode。 Nodes.Add(List(x)) Next – Smith

回答

2

您需要兩個循環。一個循環爲列表,第二個循環通過斜線分隔的項目。棘手的部分是區分屬於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 
+0

嗨LarsTech,謝謝你的回答......它只是起作用。我不知道爲什麼人們急於將我的問題標記爲重複。 – Smith

+0

@史密斯:因爲它或多或少都是重複的,如果你想得到特別的幫助,你必須始終告訴我們你試過的東西嗎? (現在你已經完成了,這很好:)) - 你看,顯示你的嘗試是相當[**特定的準則**](https://stackoverflow.com/help/how-to-ask)的堆棧溢出。僅僅[**要求提供代碼**](https://stackoverflow.com/help/on-topic)通常太寬泛,因爲解決該問題的方法有很多。 –

-1

我也找到答案,但我的代碼給出了不正確的結果......而@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