2014-05-23 41 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

相关问题