Содержание материала

...если вам не дорого время обработки массива узлов.

 

Значительно быстрее будет так:

Code:

Noddy := MyTreeView.Items[0];

Searching := true;

while (Searching) and (Noddy <> nil) do

begin

if Noddy.text = SearchTarget then

begin

   Searching := False;

   MyTreeView.Selected := Noddy;

   MyTreeView.SetFocus;

end

else

begin

   Noddy := Noddy.GetNext

end;

end;

 

В моей системе приведенный выше код показал скорость 33 милисекунды при работе с деревом, имеющим 171 узел. Первый поиск потребовал 2.15 секунд.

 

Оказывается, процесс индексирования очень медленный. Я подозреваю, что при каждой индексации свойства Items, вы осуществляете линейный поиск, но это нигде не засвидетельствовано, поэтому я могу ошибаться.

 

Вам действительно не нужно просматривать все дерево, чтобы найти что вам нужно - получить таким образом доступ к MyTreeView.Items[170] займет много больше времени, чем получения доступа к MyTreeView.Items[1].

 

Как правило, для отслеживания позиции в дереве TreeView, нужно использовать временную переменную TTreeNode, а не использовать целочисленные индексы. Возможно, свойство ItemId как раз и необходимо для такого применения, но, к сожалению, я никак не могу понять абзац в электронной документации, касающийся данного свойства:

 

 

   "Свойство ItemId является дескриптором TTreeNode типа HTreeItem 

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

   это свойство, если вам необходимо получить доступ к элементам

   дерева из внешнего по отношению к TreeView элемента управления."

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить