动态创建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的区别,谢谢啦~~
我用的是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的区别,谢谢啦~~
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;
你照着TLIST.DELETE改下就好了,关键就是他的MOVE函数
Free是delphi推荐的销毁方式,其实就是多了一个Self<>nil的检查然后就调用Destroy进行destruct了
FreeAndNil就是再给传入的TObject再设个nil而已TStrings.Delete不管成员的销毁,事实上它也不敢管,谁知道你放的是不是Object呢