2011-11-10 73 views
0

我有树节点的节点。C#树形路径

something = treeview.Nodes[1].Nodes[4].Nodes[0]; 

TreeNode myNode = something; 

并希望知道它有哪些pany父母,以及我需要使用哪些索引来从此节点中找出整个路径。

我的意思是让 “treeview.Nodes [1] .Nodes [4] .Nodes [0]” 走出MYNODE

+0

您能否给一些更多的解释?也许更好的例子? – Nick

+0

你明白我的意思吗? – santBart

+0

你在用什么?的WinForms? – svick

回答

1

像这样的东西应该工作:

public IList<int> GetNodePathIndexes(TreeNode node) 
{ 
    List<int> indexes = new List<int>(); 
    TreeNode currentNode = node; 
    while (currentNode != null) 
    { 
     TreeNode parentNode = currentNode.Parent; 
     if (parentNode != null) 
      indexes.Add(parentNode.Nodes.IndexOf(currentNode)); 
     else 
      indexes.Add(currentNode.TreeView.Nodes.IndexOf(currentNode)); 

     currentNode = parentNode; 
    } 
    indexes.Reverse(); 
    return indexes; 
} 

然后,您可以看看这个结果来获得索引和计数,以获得父母的数量。

IList<int> path = GetNodePathIndexes(myNode); 

StringBuilder fullPath = new StringBuilder("treeview"); 
foreach (int index in path) 
{ 
    fullPath.AppendFormat(".Nodes[{0}]", index); 
} 

然后fullPath.ToString()应该返回treeview.Nodes[1].Nodes[4].Nodes[0]

0
//... 
string path = GetPath(treeView1.Nodes[0].Nodes[0].Nodes[1].Nodes[0]); 
// now path is "treeView.Nodes[0].Nodes[0].Nodes[1].Nodes[0]" 
//... 
string GetPath(TreeNode node) { 
    int index; 
    Stack<string> stack = new Stack<string>(); 
    while(node != null) { 
     if(node.Parent != null) { 
      index = node.Parent.Nodes.IndexOf(node); 
      stack.Push(string.Format("Nodes[{0}]", index)); 
     } 
     else { 
      index = node.TreeView.Nodes.IndexOf(node); 
      stack.Push(string.Format("treeView.Nodes[{0}]", index)); 
     } 
     node = node.Parent; 
    } 
    return string.Join(".", stack.ToArray()); 
}