如何在运行时生成不定个控件(100分)

  • 主题发起人 主题发起人 asdfgh
  • 开始时间 开始时间
A

asdfgh

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在程序运行时生成几个控件,生成控件的个数由外界输入,在程序编写过程中不知道
 
var acomponent:componenttype;
for i:=1 to strtoint(edit1.text) do
begin
acomponent.create(self);
with acomponent do
begin
parent:=.....
name:=edit2.text;
......
end;
end;
 
在控件生成时代码是这样写,但在程序开始时应定义该控件,在不知道要生成几个控件的前提下,我定义几个控件?
 
根据Liuchuanbao兄的答案,我给个小小的补丁
var acomponent:array[1..30] of Tbutton{以按钮为例};// 生成一个以上的空件最好用ARRAY[]数组声明{其中30由您自己在编程时考虑决定}
comcount: integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
comcount:=strtoint(edit1.text);
for i:=1 to comcountdo
begin
acomponent[comcount].create(self);
with acomponent[comcount]do
begin
parent:=.....
name:=edit2.text;
......
end;
end;
end;
 
可以用变长数组的呀!
var acomponent:array of componenttype;
...
setlength(acomponent,30);
 
用动态数组
如popeye所说
 
用动态数组
不过记得要释放
 
遵照各位大侠所言,我编写了程序,但在运行到acomponent[comcount].create(self);时总是报错,救人救到底帮人帮到家,恳请帮助!
 
可不能这样写,应该是:
aComponent[Comcount] := TTheComponent.Create(aOwner);
那样写不错才怪。
 
可用TList,把控件记录在Tlist里则可,退出时把控件释放
 
多人接受答案了。
 
后退
顶部