2012-07-13 1 views
3

Я хотел бы пройти ВСЕ корни VirtualTreeView и удалить их.Виртуальный цикл TreeView

Я не хочу его очищать.

Я получаю нарушение прав доступа с помощью этого кода:

var 
Node : PVirtualNode; 
begin 
if VirtualStringTree1.GetFirst = NIL then exit; 
Node := NIL; 
repeat 
    if Node = NIL then 
    Node := VirtualStringTree1.GetLast 
    else Node:=VirtualStringTree1.GetPrevious (Node); 
    if Node <> NIL then VirtualStringTree1.DeleteNode(Node); 
until Node = VirtualStringTree1.GetFirst; 
end; 

Спасибо за вашу помощь.

+5

Какая разница между очисткой списка и удаление всех узлы? –

+1

Как насчет RootNodeCount: = 0? –

+0

rootnodecount: = 0 тоже хорошо. Разница в том, что мне нужны некоторые данные из корневых узлов, прежде чем я их удалю. –

ответ

8

У вас есть логическая ошибка в реализации: после удаления узла ваша локальная переменная Node указывает на несуществующий узел.

Я не понимаю, почему вы не хотите просто очистить дерево, но вы можете удалить все узлы, от последнего до первого, как это:

var 
    Node, TmpNode: PVirtualNode; 
begin 
    Node := Tree.GetLast; 
    while Assigned(Node) do 
    begin 
    TmpNode := Tree.GetPrevious(Node); 
    Tree.DeleteNode(Node); 
    Node := TmpNode; 
    end; 
end; 
+0

это работает как шарм спасибо. ты прав, я совсем забыл об этом. –

Смежные вопросы