3

我想遍历 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;

谢谢您的帮助。

4

1 回答 1

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;
于 2012-07-13T07:50:02.043 回答