关于ListBox1.items.AddObject('dd',Tobject(pnode)),然后我要清除ListBox时,总出错误 ListBox1.items.object[i].free;,清帮忙看一下好吗? 
就在删除对象的时候总是除错误????——————
procedure TfmSetSZSL_main.aDelTreeExecute(Sender: TObject);
var
  i:integer;
begin
  inherited;
  for i:=0 to self.ListBox1.Items.Count-1 do
    self.ListBox1.Items.Objects[0].free;  //出错误
    // 环城这样也出错self.ListBox1.Items.Objects[i].free;
  self.ListBox1.Items.Clear;
end;
procedure TfmSetSZSL_main.amaketreeExecute(Sender: TObject);   //add Tobject to ListBox1
var
  pnode:Tpnode;
begin
  inherited;
  qryTMP.Close;
  qryTMP.SQL.Text:='Select * from sys';
  qryTMP.Open;
  while not qryTMP.Eof do
  begin
    new(pnode);
    pnode.szmc:=qryTMP.fieldbyname('aa').AsString;
    pnode.szdm:=qryTMP.fieldbyname('bb').AsString;
    ListBox1.Items.AddObject(pnode.szmc,Tobject(Pnode));
    qryTmp.Next;
  end;
end;

解决方案 »

  1.   

    inherited;
      for i:=0 to self.ListBox1.Items.Count-1 do
        Tpnode(ListBox1.Items.Objects[0]).free;  //出错误
        // 环城这样也出错self.ListBox1.Items.Objects[i].free;
      self.ListBox1.Items.Clear;
      

  2.   

    inherited;
      for i:=0 to self.ListBox1.Items.Count-1 do
    begin
      if Assigned(ListBox1.Items.Objects[0])) then 
        Tpnode(ListBox1.Items.Objects[0]).free;  //这样能更好点!
     end;   
      self.ListBox1.Items.Clear;
      

  3.   

    procedure TfmSetSZSL_main.aDelTreeExecute(Sender: TObject);
    type
      Ppnode:^Tpnode;
    var
      i:integer;
    begin
      inherited;
      for i:=self.ListBox1.Items.Count-1 down to 0 do
        Dispose(PPnode(self.ListBox1.Items.Objects[i]));
      self.ListBox1.Items.Clear;
    end;
      

  4.   

    procedure  TfmSetSZSL_main.aDelTreeExecute(Sender:  TObject);  
    type  
       Ppnode:^Tpnode;  
    var  
       i:integer;  
    begin  
       inherited;  
       for  i:=self.ListBox1.Items.Count-1  down  to  0  do  
           Dispose(PPnode(self.ListBox1.Items.Objects[i]));  
       self.ListBox1.Items.Clear;  
    end;