动态创建tpanel类型的数组,但是要创建的数组数量太大,假设当前创建500个的时候,将前400个的控件释放
我用的是free,部分代码如下procedure TForm1.Button1Click(Sender: TObject);
var  i : Integer;
  p : array of TPanel;
begin
  for i :=0 to 10 do
  begin
    SetLength(p,Length(p)+1);
    p[i] := TPanel.Create(Form1);
    p[i].Parent := Form1;
    p[i].SetBounds(50,50*i,60,40);
  end;
  ShowMessage(IntToStr(Length(p)));
  for j :=0 to 4 do
  begin
    p[j].Free;
  end;
  ShowMessage('panel  '+ IntToStr(Length(p)));
end;
还有就是我想知道destroy和delete的区别,谢谢啦~~

解决方案 »

  1.   


    procedure TForm1.Button1Click(Sender: TObject); 
    var   i : Integer; 
      p : array of TPanel; 
    begin 
      for i :=0 to 10 do 
      begin 
        SetLength(p,Length(p)+1); 
        p[i] := TPanel.Create(Form1); 
        p[i].Parent := Form1; 
        p[i].SetBounds(50,50*i,60,40); 
      end; 
      ShowMessage(IntToStr(Length(p))); 
      for j :=0 to length(p)-1
      begin 
        p[j].Free; 
      end; 
      setLength(p,0);
      ShowMessage('panel  '+ IntToStr(Length(p))); 
    end; 
      

  2.   

    楼主是不是从C++过来的, delete
      

  3.   

    不是,没有怎么学过C++,很多现成的对象都有delete方法的,如tstringlist
      

  4.   

    那个我也知道,三种方法吗,free,Finalize,FreeAndNil
      

  5.   

    这个以前有人问过,用动态数组你删除中间的后,得把后边往前边挪
    你照着TLIST.DELETE改下就好了,关键就是他的MOVE函数
      

  6.   

    Finalize只负责动态数组、string和与它们两个有关record的清理
    Free是delphi推荐的销毁方式,其实就是多了一个Self<>nil的检查然后就调用Destroy进行destruct了
    FreeAndNil就是再给传入的TObject再设个nil而已TStrings.Delete不管成员的销毁,事实上它也不敢管,谁知道你放的是不是Object呢
      

  7.   

    貌似我可以尝试一下freeAndNill