首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

急运行中自动创建控件,关闭窗体之前,无论free与否,都产生异常:直接关闭窗体时,产生“Invalid Pointer operation”;先free掉

2012-02-14 
急!!!运行中自动创建控件,关闭窗体之前,无论free与否,都产生错误:直接关闭窗体时,产生“Invalid Pointer op

急!!!运行中自动创建控件,关闭窗体之前,无论free与否,都产生错误:直接关闭窗体时,产生“Invalid Pointer operation”;先free掉,
运行中自动创建控件,关闭窗体之前,无论free与否,都产生错误:直接关闭窗体时,产生“Invalid   Pointer   operation”;先free掉,然后在关闭窗体,这时产生0地址错误。

[解决办法]
public
destructor destrory;override;


destructor aaa.Destroy;
begin
xxxx.Free;//释放到你的东东
inherited Destroy;
end;
[解决办法]
===============================================================================
ycjf(求知者) ( ) 信誉:100 Blog 加为好友 2007-4-24 17:10:28 得分: 0



TO gobiz:
用FreeAndNil,提示“Constant object cannot be passed as var parameter”,但我的控件是在程序运行中自动创建的,须使用变量或参数。


==================================================================================

procedure TForm1.FormCreate(Sender: TObject);
var
AEdit: TEdit;
begin
AEdit := TEdit.Create(Self);
AEdit.Parent := Self;
AEdit.Name := 'EditTest ';
AEdit.Top := 100;
AEdit.Left := 100;
……
end;

procedure TForm1.FormDestory(Sender: TObject);
var
i: Integer;
AEdit: TEdit;
begin
//方法1
AEdit := TEdit(FindComponent( 'EditTest '));
FreeAndNil(AEdit);
//方法2
for i:=0 to ComponentCount-1 do
begin
if (Components[i] is TEdit) and ((Components[i] as TEdit).Name = 'EditTest ') then
begin
AEdit := TEdit(Components[i]);
Break;
end;
end;
FreeAndNil(AEdit);
//方法3
由于本例中动态创建的Edit的Owner是Self(这里就是Form1),所以根本就不用自己来释放,只要窗体释放了,那么这个动态创建的控件就可以自动释放的。
end;

//如果本例中创建的Edit的Owner是nil,即是使用AEdit := TEdit.Create(nil)来创建的,那么就可以在需要释放的地方使用方法1、方法2来释放。

热点排行