2011-11-10 3 views
0

私はTreeNodeノードを持っています。c#treeview path

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

TreeNode myNode = something; 

そして、それが持っているとどのようなインデックスを私はこのノードから全体のパスを見つけるために使用する必要があるかパニィ両親知りたいです。

私が手に "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()); 
}