动态创建的button,为什么在关闭form的时候会出现'Invalid pointer operation' (100分)

  • 主题发起人 主题发起人 foxweb
  • 开始时间 开始时间
F

foxweb

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下
procedure TForm_main.FormCreate(Sender: TObject);
var
i:integer;
button_width:integer;
button_height:integer;
label_width:integer;
label_height:integer;
left_temp:integer;
top_temp:integer;
left_default:integer;
//top_default:integer;
begin
button_width:=60;
button_height:=60;
label_width:=button_width;
label_height:=30;
left_temp:=15;
top_temp:=5;
left_default:=15;
for i:=0 to listname.Count -1 do
begin
button_temp:=tspeedbutton.Create(self);
label_temp:=tlabel.Create(self);
with button_temp do
begin
Parent:=form_main;
Top:=top_temp;
Left:=left_temp;
Width:=button_width;
Height:=button_height;
Flat:=false;
Layout:=blGlyphTop;
Tag:=i;
OnClick:=myClick;
end;
with label_temp do
begin
Parent:=form_main;
AutoSize:=false;
Alignment:=taCenter;
WordWrap:=true;
top:=button_temp.top + button_temp.Height + 2;
left:=button_temp.Left;
width:=label_width;
height:=label_height;
Font.Color:=$00CD5532;
Caption:='abc';
end;
end;

procedure TForm_main.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
begin
for i:=high(label_temp) downto low(label_temp) do
label_temp.free;
for i:=high(button_temp) downto low(button_temp) do
begin
button_temp.free;
end;
end;
//
button_temp和label_temp是在private中声明的
但在关闭的时候label_temp可以释放,但button_temp释放到button_temp[0]时就报错
程序无法退出,请各位dfw帮忙解决
 
用for i:=length(button_temp) downto 0 do
button_temp.free
试试看?
 
不要释放试试看?因为系统会自己给你释放掉
 
检查你创建的button的数组button_temp的定义是否是这样的:
var
button_temp : array[0..10] of TButton;
然后你才能使用如下语句释放:
var
i : integer;
for i := length[button_temp] downto 0 do
button_temp.free;
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
875
import
I
I
回复
0
查看
687
import
I
I
回复
0
查看
516
import
I
I
回复
0
查看
662
import
I
后退
顶部