найти и заменить узел дерева в C # - PullRequest
0 голосов
/ 26 августа 2009

У меня есть вид дерева в моем коде C #. Я хочу заменить все существующие вхождения узла дерева другим текстом во всем моем дереве при нажатии кнопки.

Например, у меня есть 3 случая с узлом «Текст» как «Ручной». Я хочу заменить все эти 3 узла текстом «Автоматически». Проблема в том, что эти 3 узла находятся под 3 разными ветвями в древовидной структуре. Они не имеют общий родительский узел. Я намереваюсь написать, чтобы сделать этот процесс автоматическим, написав цикл for, но я не понимаю, как найти необходимые 3 узла.

1 Ответ

3 голосов
/ 26 августа 2009

Я бы предложил использовать рекурсивность.

Конечно, это пример, и вам нужно будет удалить объявление myTree и использовать свое дерево, но это поможет вам начать.

private void replaceInTreeView()
{
    TreeView myTree = new TreeView();
    ReplaceTextInAllNodes(myTree.Nodes, "REPLACEME", "WITHME");
}

private void ReplaceTextInAllNodes(TreeNodeCollection treeNodes, string textToReplace, string newText)
{
    foreach(TreeNode aNode in treeNodes)
    {
        aNode.Text = aNode.Text.Replace(textToReplace, newText);

        if(aNode.ChildNodes.Count > 0)
            ReplaceTextInAllNodes(aNode.ChildNodes, textToReplace, newText);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...