0
我有樹節點的節點。C#樹形路徑
something = treeview.Nodes[1].Nodes[4].Nodes[0];
TreeNode myNode = something;
並希望知道它有哪些pany父母,以及我需要使用哪些索引來從此節點中找出整個路徑。
我的意思是讓 「treeview.Nodes [1] .Nodes [4] .Nodes [0]」 走出MYNODE
我有樹節點的節點。C#樹形路徑
something = treeview.Nodes[1].Nodes[4].Nodes[0];
TreeNode myNode = something;
並希望知道它有哪些pany父母,以及我需要使用哪些索引來從此節點中找出整個路徑。
我的意思是讓 「treeview.Nodes [1] .Nodes [4] .Nodes [0]」 走出MYNODE
像這樣的東西應該工作:
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]
//...
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());
}
您能否給一些更多的解釋?也許更好的例子? – Nick
你明白我的意思嗎? – santBart
你在用什麼?的WinForms? – svick