虚拟TreeView循环

Ben*_*iss 3 delphi delphi-7 virtualtreeview tvirtualstringtree

我想浏览VirtualTreeView的所有根并删除它们.

我不想清除它.

我使用此代码获取访问冲突:

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;
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

Ond*_*lle 10

您的实现中存在逻辑错误:删除节点后,您的局部变量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;
Run Code Online (Sandbox Code Playgroud)