用addobject 添加拉一个类,可是在delete 和clear  listbox时不会自动释放,我写拉下面的代码,也没有释放内存,请问各位大侠,错在那里,怎么改
procedure TForm1.Button1Click(Sender: TObject);
var
  ButtonTest : TButton;
  i : integer;
begin
  for i := 1 to 1000 do
  begin
    ButtonTest:= TButton.Create(self);
    ListBox1.Items.AddObject(inttostr(i)+'东方宫地方国风的东方宫',TObject(ButtonTest));
  end;
end;procedure TForm1.Button4Click(Sender: TObject);
var
  i : integer;
begin
 for i:=0 to ListBox1.Count - 1 do
  begin
    TButton(ListBox1.Items.Objects[0]).free;
    ListBox1.Items.Objects[0]:=nil;
  end;
  ListBox1.Items.Clear;
end;

解决方案 »

  1.   

    for i := 0 to listbox1.items.count - 1 do
     ...
      

  2.   

    procedure TForm1.Button4Click(Sender: TObject);
    var
      i : integer;
    begin
     for i:=0 to ListBox1.Count - 1 do
      begin
        TButton(ListBox1.Items.Objects[i]).free;// 是"i"
        ListBox1.Items.Objects[i]:=nil;
      end;
      ListBox1.Items.Clear;
    end;
      

  3.   

    我想应该是这样吧?procedure TForm1.Button4Click(Sender: TObject);
    var
      i : integer;
    begin
      for i:=0 to ListBox1.Count - 1 do
      begin
        TButton(ListBox1.Items.Objects[i]).free;
        ListBox1.Items.Objects[i]:=nil;
      end;
      ListBox1.Items.Clear;
    end;循环里面要用i呀
      

  4.   

    最好把addobject 里面的对象保存到一个压入List当中
      

  5.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      i : integer;
    begin
     for i:=0 to ListBox1.Count - 1 do
      begin
        TButton(ListBox1.Items.Objects[i]).free;
        ListBox1.Items.Objects[i]:=nil;
      end;
      ListBox1.Items.Clear;
    end;
      

  6.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      i : integer;
    begin
     for i:=0 to ListBox1.Items.Count - 1 do
      begin
        FreeAndNil(ListBox1.Items.Objects[ListBox1.Count - 1]);
      end;
      ListBox1.Items.Clear;
    end;
      

  7.   

    大家试一下,
      For I:=ListBox1.Items.count-1 downto 0 do
       begin
        //同上
       end