2014-05-23 37 views
2

穿越我想通過設置的值屬性是它在樹中的位置一個TreeView &遍歷如下圖所示如何設置的位置,同時通過樹形

 A[val:1]->A1[val:11] 
     l l--->A2[val:12] 
     l----->A3[val:13] 

    B[val:2]->B1[val:21] 
     l l--->B2[val:22] 

    C[val:3]->C1[val:31] 
     l l--->C2[val:32] 

我寫了一個遞歸返回我所有的節點,但我無法將所需的位置分配給其節點。

private void TraverseTreeNode(TreeNodeCollection nodes) 
    { 
     foreach (TreeNode node in nodes) 
     { 
      TraverseTreeNode(node.ChildNodes); 
     } 
    } 
+0

你只是做這兩個級別? – Marcus

回答

2

考慮到TreeNode.Value是字符串類型,這會,起始於等級= 1:

private static void TraverseTreeNode(TreeNodeCollection nodes, int parentNumber) 
    { 
     var childNumber = 1; 
     foreach (TreeNode node in nodes) 
     { 
      node.Value = string.Format("{0}{1}", parentNumber, childNumber).Substring(0,node.Depth+1); 
      TraverseTreeNode(node.ChildNodes, parentNumber); 
      childNumber++; 
      if (node.Depth == 0) { parentNumber++; } 
     } 
    } 

只有作品對於兩個級別,但可以通過向TraverseTreeNode添加其他參數來輕鬆擴展。

UPDATE

下面將在層次中的任何深入的工作:

private static void TraverseTreeNode(TreeNodeCollection nodes, int parentNumber) 
    { 
     var childNumber = 1; 
     foreach (TreeNode node in nodes) 
     { 
      node.Value = node.Parent != null && node.Parent.Value != null 
       ? string.Format("{0}{1}", node.Parent.Value, childNumber) 
       : string.Format("{0}{1}", parentNumber, childNumber).Substring(0, node.Depth + 1); 

      TraverseTreeNode(node.ChildNodes, parentNumber); 
      childNumber++; 
      if (node.Depth == 0) { parentNumber++; } 
     } 
    } 
1

,因爲你需要遞歸方法,試試這個

 private void Caller() 
    { 
     TraverseTreeNode(treeView1.Nodes); 
    } 

    private void TraverseTreeNode(TreeNodeCollection nodes) 
    { 
     int index = 1; 
     foreach (TreeNode node in nodes) 
     { 
      node.Text = (node.Parent != null ? node.Parent.Text : string.Empty) + index++; 
      TraverseTreeNode(node.Nodes); 
     } 
    } 
+0

它必須是遞歸的 – Tuscan

相關問題