2017-09-25 5 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 

のような値が含まれている大規模なリストを持って、私は非常に混乱していたTreeViewコントロールを作成する方法についてvb.netで

ことができる人私を助けてくれない?お願いします。前もって感謝します。

enter image description here

+0

[_ **質問を再度お願いします。](https://stackoverflow.com/q/46409872)回答を得ることは間違いありません。例外はありますが、スタックオーバーフローはコーディングサービスではありません。あなたがこれまでに試したことを私たちに教えてください。 –

+0

基本的には、文字列を '\'に分割し、最初の項目(インデックス0)を保持し、各分割項目を各前ノードの下に子ノードとして追加します。 List.Countへ –

+0

薄暗い一覧=スプリット( "ドライブ\ First1 \フォルダ2 \ FOLDER3"、 "\") のparentNode = TreeView1.Nodes.Add(一覧(0))は、x = 1の場合 - 1 のparentNode。 Nodes.Add(List(x)) – Smith

答えて

2

2つのループが必要です。リストの1つのループ、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

@Smith:多かれ少なかれ、重複しているので、特定のヘルプが必要な場合は、試したことを常に表示する必要がありますか? (これであなたはそれがうまくいったことになりました:)) - あなたの試みはスタックの[**特定のガイドライン**](https://stackoverflow.com/help/how-to-ask)オーバーフロー。単に問題を解決する方法が余りにも多いので、通常は[** asking for code **](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