动态创建组件

peter_xiong 2001-12-14 10:06:06
请问在Delphi中怎样动态创建一个组件,而在创建之前是不知道该组件的具体名称。
也就是说在之前没有定义变量。可以实现吗?
...全文
80 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuboo 2001-12-14
  • 打赏
  • 举报
回复
createbutton(yournum);
var
yourbutton:array of tbutton;
i:integer;
beging
setlength(yourbutton,yournum);
for i:=1 to yournum do
begin
yourbutton[i]:=tbutton.create(self);
yourbutton.parent:=yourform;
.....
end;
end;
pathe 2001-12-14
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
compDy : TComponent;
begin
compDy := TEdit.Create(nil);
(compDy as TEdit).Parent:=Form1;
end;
不太清楚你的意思,你可以定义一个Tcomponent的变量,如上;
你也可以:
TEdit.Create(nil).parent := Form1;
但这样再操作该组件时,只能用FindComponet查找后再操作!
tuboo 2001-12-14
  • 打赏
  • 举报
回复
创建之前你连创建哪类组件都不知道,这岂不是踩西瓜皮溜到哪算哪,好像不是编程应有的风格吧,一般来说事先应该知道所要创建的是哪种组件的,创建个数倒是可以用动态数组设为不祥.
cobi 2001-12-14
  • 打赏
  • 举报
回复
为了方便在程序中控制,动态创建的控件最好还是首先定义一个变量做标识,然后控制使用,象
dd : TDbedit这样。如果创建数量比较多的话,也可用控件数组实现,like:
ArrayDbedit : Array of TDBedit;
peter_xiong 2001-12-14
  • 打赏
  • 举报
回复
to:lizhenjia
可以创建多个吗?
cobi 2001-12-14
  • 打赏
  • 举报
回复
var
dd : TDbedit;
i : integer;
begin
for i:=1 to 10 do
begin
dd:=tdbedit.Create(self);
dd.Name:='dbedit'+inttostr(i); //以序号来命名控件
dd.Width:=170;
dd.DataSource:=dm1.datasource1;
end;
end;
peter_xiong 2001-12-14
  • 打赏
  • 举报
回复
没有人吗?
lizhenjia 2001-12-14
  • 打赏
  • 举报
回复
是这个意思吗?
procedure TForm1.Button1Click(Sender: TObject);
var
b:Tbutton;
begin
b:=Tbutton.Create(self);
b.name:='java';
b.parent:=form1;
b.Caption:='2';
b.top:=100;
b.left:=100;
end;

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧