Как найти точный узел в AdvTree? - PullRequest
0 голосов
/ 03 февраля 2020

Мне было интересно, есть ли уже что-то встроенное в элемент управления AdvTree в библиотеке DotNetBar или мне нужно создать свой собственный путь.

Допустим, у меня есть 5 родительских узлов (уровень 0) в дереве , Под этими узлами уровня 0 у меня есть несколько узлов уровня 1 (я называю их узлами SubParent). В этих узлах SubParent у меня наконец будут дочерние узлы (уровень 2)

Пример:

ParentNode1
├─ SubParentNode1
│  └─ ChildNode1
│  └─ ChildNode2
│  └─ ChildNode3
ParentNode2
├─ SubParentNode2
│  └─ ChildNode1
│  └─ ChildNode2
│  └─ ChildNode3

Я хотел бы добавить новый ChildNode для ParentNode2 в элементе управления AdvTree. Я придумал несколько идей о том, как это сделать, но я не думаю, что они хороши, и мне кажется, что есть лучшее решение.

  1. L oop через ВСЕ узлы в дереве и если node.text или node.tag = NodeText , то node.nodes.add («Новый дочерний узел»)

  2. Использование AdvTree1 .FindNodeByText (NodeText)

    • Проблема, с которой я столкнулся, заключается в том, что она будет искать ВСЕ узлы, где текст похож на строку ввода

Я надеялся, что элемент управления AdvTree смог сделать что-то вроде AdvTree.Nodes ("ParentNode1"). Nodes ("SubParentNode1"). Nodes.Add ("ChildNode4"), но кажется, что это невозможно.

Как я могу быть уверен, что когда я хочу добавить новый ChildNode в SubParentNode2, он не добавит его в SubParentNode1 из-за сходства имен?

Код для метода 1:

For Each SubParentNode As Node In AdvTree1.Nodes
    If SubParentNode.Level = 1 And SubParentNode.Text = "Node To Find" Then
        SubParentNode.Nodes.Add("New Child New")
    End If
Next

Мне не нравится использовать этот метод, потому что я знаю, что моё дерево может стать очень большим, поэтому может потребоваться много времени, чтобы l * 1 040 * через все узлы. Я еще не тестировал скорость.

Код для метода 2:

Dim SubParentNode As Node = AdvTree.FindNodeByText("Node to Find")
If SubParentNode Is Nothing Then
    'Cannot find the node
Else
    'The node was found
    If SubParentNode.Level = 1 Then : SubParentNode.Nodes.Add("New ChildNode")
    End If
End If

Используя этот метод, если есть несколько узлов с одинаковыми именами, например: Node1, Node2, Node3, et c, функция поиска может не работать

...