读书人

动态创建1000个label怎么释放内存

发布时间: 2012-04-24 14:15:38 作者: rapoo

动态创建1000个label,如何释放内存
var
a:array of tlabel;
begin
setlength(a,1000);
for i:=0 to 999 do
begin
创建1000个label;
end;
end;

这1000个label如何释放?

[解决办法]

Delphi(Pascal) code
type  TForm1 = class(TForm)    Button1: TButton;    Button2: TButton;    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);  private   a:array of tlabel;  public    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var i:integer;beginsetlength(a,1000);for i:=0 to 999 do begin   a[i] := TLabel.Create(self);   a[i].Left := i+5;   a[i].top := i+5;   a[i].Caption := ' Label'+ IntToStr(i);   a[i].Parent := Form1; end;end;procedure TForm1.Button2Click(Sender: TObject);var i:integer;begin for i := Length(a)-1 downto 0 do  a[i].free;end;
[解决办法]
for i:=low(a) to hight(a) do
a[i].free;

设置为0长度的数组,如setlength(a,0)可以认为就是释放数组,有人说a:=nil也是释放,不过这2个都没意义
因为动态数组是在堆上分配的,过程结束自动释放,不用手工去处理,只要把创建的控件释放就行了

读书人网 >.NET

热点推荐