我想动态生成TButton,TEdit,TLable等控件,我定义了一个TCompeonet(100分)

  • 主题发起人 主题发起人 javanew
  • 开始时间 开始时间
J

javanew

Unregistered / Unconfirmed
GUEST, unregistred user!
if style=1 then
TCompeonet:=TButton.Create(self)
else
TCompeonet:=TEdit.Create(self);

但有几个问题
1.能创建,但是不能显示
2.有没有更好的办法?
 
你最好不要使用TCompeonet,你直到T开始的一般为CLASS,而你仅仅是想创建一个实例,
在程序设计中最好使用v+button等,这样在程序开发中好理解!
不能显示的话,你设置一下实例的位置,vbutton.top=???,vbutton.left=???,应该可以
显示出来的!再显示不出来,你可以跟踪一下vbutton.visible的值,若为false,你应把
他设置为true!
 
MyButton := TButton.Create(Self);
MyButton.Parent := parent;
MyButton.top := 125;
MyButton.Left := 125;
MyButton.OnClick := Button1Click(Sender);
 
关键是我不一定只会创建button,有可能是edit也有可能是lable
我想灵活一点,不至于在程序中定义三个变量
mybutton:tbutton;
myedit:tedit;
mylabel:tlabel;
这样感觉不好
 
下面这样可以满足你的要求,你可以按要求灵活改动!下面只是一个简单例子:
看看吧!
procedure TForm1.Button1Click(Sender: TObject);
var
tcompeonet:TWinControl;
begin
if edit1.text='b' then
begin
TCompeonet:=TButton.Create(self);
tcompeonet.Parent:=form1;
end
else
begin
TCompeonet:=TEdit.Create(self);
tcompeonet.Parent:=form1;
end;
end;

 
不要用TComponent改为TControl:
var
AControl: TControl;
begin
if style=1 then
AControl:=TButton.Create(self)
else
AControl:=TEdit.Create(self);
AControl.Parent := Self;

这样就可以解决你的问题了。

 
利用with ... do可以不用定义变量
if style=1 then
with TButton.Create(self) do
begin
Name := 'MyButton';
Parent := self; //一定要设置Parent属性,否则不能显示控件.Parent设置为放置你创建控件的容器的名称,如:Parent := Form1
OnClick := MyClick;// MyClick(Sender: TObject)是自定义的过程
......
end
else if Style = 2 then
with TEdit.Create(self) do
begin
Name := 'MyEdit';
Text := '自己需要的内容';
Parent := self;
......
end
else
with TLabel.Create(self) do
begin
Name := 'MyLabel';
Caption := '设置自己需要的标题';
Parent := self;
....
end;
 
多人接受答案了。
 
后退
顶部