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 に答える