今天有人在一个群里反复在问Delphi里有没有类似于VB中控件数组的东西,不过感觉Delphi控件数组的管理稍显麻烦,所以写了如下的测试代码,大家可以看看:
...
{**
* 作者:网事如风
* 作用:用TObjectList实现的控件数组代码:
* 使用:
**}

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Contnrs, Math;
type
TForm1
=
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject;
var
Action: TCloseAction);
private

...
{ Private declarations }
public

...
{ Public declarations }
LabelList : TObjectList;
end;
var
Form1: TForm1;
implementation

...
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
InsertLbl : TLabel;
I,RecCou : Integer;
begin
LabelList :
=
TObjectList.Create();
RecCou :
=
8
;

for
I :
=
0
to RecCou
-
1
do
begin

InsertLbl :
=
TLabel.Create(nil);
InsertLbl.Parent :
=
Self;
InsertLbl.Name :
=
'
Test
'
+
IntToStr(I);
InsertLbl.SetBounds(
20
*
(I
+
1
),
20
*
(I
+
1
),
20
,
20
);

InsertLbl.Color :
=
IfThen( Odd(I), clred, ClYellow );
//
颜色区分
LabelList.Add(InsertLbl);
InsertLbl :
=
Nil;
end;

//
使用
for
I :
=
0
to LabelList.Count
-
1
do
begin
TLabel(LabelList.Items[I]).Caption :
=
IntToStr(I);
end;
//
最后在FormClose的时候需要 : FreeAndNil(LabelList);
end;
procedure TForm1.FormClose(Sender: TObject;
var
Action: TCloseAction);
begin
FreeAndNil(LabelList);
end;
end.
这个先发在朋友的网站 www.lihuasoft.net 上的,后来有朋友提出疑问,我回答如下:
呵呵,关于ObjectList的帮助,在Delphi中只有那么一点点的说明,说的含糊不清,Borland该打屁股。
你可以仔细看看TObjectList的Dertory的实现,会有很大收获的,总之可以肯定的是:
Var
ObjList : TObjectList;
begin
/*
如下的实现内存是由TObjectList释放的,也就是只要Free到它就可以清空所有了
*/
Object := TObjectList.Create();
Object := TOjbectList.Create(True);
/*
如下的实现内存就必须由各自对象来释放内存
*/
Object := TOjbectList.Create(False);
end;