for I :=0 to TreeView1.Items.Count-1 do
  begin
    if i< TreeView1.Items.Count then
    TreeView1.Items[i].Delete;  end;上面这段代码运行会出错,我想通过循环来删除节点,不要TreeView1.items.clear,
因为循环过程中需要做些判断

解决方案 »

  1.   

    for I :=TreeView1.Items.Count-1 downto 0 do 
      TreeView1.Items[i].Delete; 
      

  2.   

    正解  treeview1.Items.Clear;
    这样也可以吧
      

  3.   


    while TreeView1.Items.Count > 0 do
      TreeView1.Items[0].Delete; 
      

  4.   

    如果Item.data的指针不为空,记得先释放指针。
      

  5.   


    这个放在TreeView的Deletion事件中做比较合适, 例如:
    type
      TMyData = record
        A : Integer;
        B : Integer;
        ......
      end;
      PMyData = ^TMyData;procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
    begin
      if Node.Data <> nil then Dispose(PMyData(Node.Data));
    end;
      

  6.   

    看情况吧,删节点不见得就必须删DATA的数据(也可能是保存的是其它对象的引用),我喜欢用一个OBJECTLIST装着这些挂在DATA上的对象,最后把OBJECTLIST释放了就完了。