创建控件时(以TEdit为例):
.......
with TEdit.Create(Form1)do
begin
Left:=100;
Top:=100;
Tag:=1;
Parent:=Form1;
end;
.......
释放时调用过程FreeAllCreatedByMe(Form1):
procedure FreeAllCreatedByMe(const WinControl:TWinControl);
var
ls:TList;
i:Integer;
begin
ls:=TList.Create;
try
with WinControldo
for i:=0 to ControlCount-1do
if Controls.Tag=1 then
ls.Add(Controls);
for i:=0 to ls.Count-1do
TControl(ls).Free;
finally
ls.Free;
end;
end;
???ls.Count,系统提示出错???
不会吧。
TList是一个用于存放指针的列表,像个随意增加的数组。
可以写成ls等价于ls.Items,因为属性Items是默认属性的。
过程FreeAllCreatedByMe通过控件数组历遍所有控件,如果控件的Tag为1,该控件就是
刚刚创建的,把它放进ls中,最后把ls中的所有控件释放。
注意不要直接在控件数组中释放控件,那样控件数组就会进行排列操作,元素的次序
可能会改变。