关于控件数组中控件的Free问题(100分)

  • 主题发起人 主题发起人 richard
  • 开始时间 开始时间
R

richard

Unregistered / Unconfirmed
GUEST, unregistred user!
为何下面的代码有时会出错:
for i:=0 to (length(vsCellCtrlArr)-1) do
if Assigned(VsCellCtrlArr) then vsCellCtrlArr.free;
其中 VsCellCtrlArr 为一控件数组。

请教如何才能安全地将控件数组中控件Free掉?
 
是不是控件处于active状态?
 
反过来就可以了
for i:=(length(vsCellCtrlArr)-1) to 0 do
if Assigned(VsCellCtrlArr) then vsCellCtrlArr.free;
 
cAkk的方法我试了,反过来之后一运行就出错!
 
1.你原来的控件数组每一个元素是否都赋过值?或创建过实例?
2.最好已开始将所有元素 := nil,然后再创建,看你的程序好像不是所有的
数组元素都有对应的控件.

 
destructor Destroy;
begin
for i:=0 to (length(vsCellCtrlArr)-1) do
if Assigned(VsCellCtrlArr) then
begin
vsCellCtrlArr.free;
vsCellCtrlArr := nil;
end;
inherited;
end;
如果你的控件是可视控件或者有Parent的控件并且Parent不是你的控件自
身的话, 需要在你的控件中加入下面代码一保证能正确释放:
procedure Notification(AComponent: TComponent; Operation: TOperation); override;

procedure Notification(AComonent: TComponent; Operation: TOperation);
var
i: Integer;
begin
inherited;
if Operation = opMove then
for i := 0 to length(vsCellCtrlArr)-1 do
if vsCellCtrlArr = AComponent then
begin
vsCellCtrlArr := nil;
break;
end;
end;

 
出什么错?list index ....?
 
是不是有控件在使用中? free它导致其它控件错误?
 
接受答案了.
 
兄弟, 最后怎么解决的???
 
只要 vsCellCtrlArr.free 后再 vsCellCtrlArr:=nil 就可以了!
 
后退
顶部