怎么释放控件? ( 积分: 10 )

  • 主题发起人 主题发起人 mill666
  • 开始时间 开始时间
M

mill666

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序是在运行的时候创建控件,比如在一个窗口form2上在运行的时候放置若干个edit控件,每个edit控件都在程序里面设置了名称,而且form2上控件的个数是变动的;然后在form1上单击一个按钮执行form2.showmodal,然后关闭form2,form2.close;这个时候如果再单击form1上的那个按钮,就出现提示"某某个名字的控件已经存在",意思就是说在form2.close后,那些控件内存没被释放。

请问应当怎么样才能在form2关闭的时候,form2上面的控件都释放掉,包括form2也释放;
 
我的程序是在运行的时候创建控件,比如在一个窗口form2上在运行的时候放置若干个edit控件,每个edit控件都在程序里面设置了名称,而且form2上控件的个数是变动的;然后在form1上单击一个按钮执行form2.showmodal,然后关闭form2,form2.close;这个时候如果再单击form1上的那个按钮,就出现提示"某某个名字的控件已经存在",意思就是说在form2.close后,那些控件内存没被释放。

请问应当怎么样才能在form2关闭的时候,form2上面的控件都释放掉,包括form2也释放;
 
form2.free;
form2 := nil;
 
在FORM2中写一个析构函数:
在PUBLIC中声明:
destructor destroy;override;

实现部分:
destructor Tform2.destroy;
begin
if edit1 <> nil then edit1.free;
inherited;
end;

这样在你关闭FORM2时就会自动执行这段代码

释放FORM2只需要在
form2.showmodal;
之后加上form2.free;即可;
 
我在form1里面调用form2:=Tform2.create(self),
然后在form2里面的“关闭”按钮编写click事件:
for I:=0 to form2.componentscount-1 do
form2.components.free;

程序执行的时候,按动这个“关闭”按钮,出现“list index out of bounds(3)”,好像是越界的意思;可是我已经控制了i的范围了啊?
为什么会这样子??
 
我想应该就是你的那个关闭按钮吧,程序在试图释放这个按钮,可相就的事件在执行
你可以把这段代码放在析构函数中执行就不会出错了
 
后退
顶部