путь к дереву - PullRequest
       9

путь к дереву

0 голосов
/ 10 ноября 2011

У меня есть узел TreeNode.

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

TreeNode myNode = something;

И хотелось бы знать, какие у него родители и какие индексы мне нужно использовать, чтобы найти полный путь от этого узла.

Я имею в виду получить "treeview.Nodes [1] .Nodes [4] .Nodes [0]" из myNode

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Примерно так должно работать:

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 голосов
/ 10 ноября 2011
//...
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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...