控件自己create后如何free?(100分)

  • 主题发起人 主题发起人 张剑波
  • 开始时间 开始时间

张剑波

Unregistered / Unconfirmed
GUEST, unregistred user!
var
btn:tradiobutton;
acount:integer;
begin

for acount:=1 to 10 do
begin
btn:=tradiobutton.create(self);
btn.parent:=self;
btn.name:='aaa'+inttostr(acount);
btn.caption:='bbb'+inttostr(acount);
end;
end;
在一个groupbox1上创建十个radiobutton
如何有选则性的free其中一个。
再:create后,controlcount的数值为何不增加而明明在窗体上已经看到。
 
>>如何有选则性的free其中一个。
可以用TComponent检索一下以前答案

>>create后,controlcount的数值为何不增加而明明在窗体上已经看到。
因为你的控件都堆在一起了,指定不同位置就可以。
如加上 btn.left:=acount*5;
 
1.aaa1.free
2.>>
>> btn:=tradiobutton.create(self);
>> btn.parent:=self;
这两句中self是form1
controlcount当然不增加,
改成
btn:=tradiobutton.create(groupbox1);
btn.parent:=groupbox1;
 
试试:
for i:=0 to ComponentCount-1 do
begin
if Components is tradiobutton then
(Components as tradiobutton).Free;
end;
 
已经没什么可说的了!

for i:=0 to ComponentCount-1 do
begin
if Components is tradiobutton then
(Components as tradiobutton).Free;
Inc(i);////////
end;
 
for i:=0 to ComponentCount-1 do
begin
if Components is tradiobutton then
(Components as tradiobutton).Free;
end;

好象不行,(Components as tradiobutton).Free;
执行一次后,Components,会有变化.Marco Cannu在高级开发指南中说过.
但我记不清了,书也不在...
 
同意DEDMAN。
直接用aaa1.free;就可以了,
为什么要检索COMPONENT数组?
 
以下是我的看法:
我认为,你可以这样做:在定义变量btn的时候,不应该只定义这样的一个变量,
应该这样定义:var btns:array[1..10] of tbutton; 这样,可以用如下的索引访问
这些变量:buts :i为索引号!如果想释放某个按扭,可以用btns.free;这样
的方法并不比定义一个btn变量浪费系统资源,而且非常方便的操纵每一个创建的控件
是最佳方法!至于Components,要确定每一个动态创建的btn,不是一个简单的事情,
要求窗体上的其他控件相对固定,并非是好方法!
还望多多批评指正!
 
设置一个指针数组变量
var
tbutton: array[1..10] of ^Ttradiobutton;
begin
tbutton[1]:=@tradiobutton1;
......
tbutton[10]:=@tradiobutton10;
end;
要删除的时候,就:
begin
tbutton[x].free;
end;
注:X表示1到10的数字。
 
1,声明数组 var BtnA: array [0..10] of TButton

2. 声明TLIST var BtnLst:TList,

3. 用FINDCOMPONENT 函数
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
515
import
I
后退
顶部