有谁知道动态生成的控件怎样命名?帮帮小弟啦!!!!!!!!(0分)

  • 主题发起人 主题发起人 qq74
  • 开始时间 开始时间
Q

qq74

Unregistered / Unconfirmed
GUEST, unregistred user!
[blue][/blue]
任意声明一个可视类,要自动在上面生成一些控件, 如:TDBEDIT,TDBTEXT,TLABEL等啦,怎么样给它们命名呢?

譬如:
fLabel:TLabel;
fPanel:=Tpanel.create(self);
for I:=1 to 10 do
begin
fLabel := TLabel.create(Owner)
//这新生成的LABEL要怎样命名呢?
fLabel.parent := fPanel;
fLabel.name := 'MyLabel1';
end;

如果我把FLABEL赋名为MYLABEL1,可运行时却提示MYLABEL1已经存在的错误





 
帮帮小弟呀
 
你是一个循环吗,当然会出现名字重复了.改成下面这样就可以了.

fLabel:TLabel;
fPanel:=Tpanel.create(self);
for I:=1 to 10 do
begin
fLabel := TLabel.create(Owner)
//这新生成的LABEL要怎样命名呢?
fLabel.parent := fPanel;
fLabel.name := 'MyLabel'+inttostr(i);
end;
 
我不用循环一样会有控件已经存在的错误提示
如:
我在类的constructor Create(AOwner: TComponent)中的代码为
inherited Create(AOwner);
init;

init的代码为
fPanel:=Tpanel.create(Woner);
fPanel.Parent:=Self;
fLabel:=TLabel.create(Woner);
fLabel.parent:=fPanel;
就在这里揭示控件已经存在的错误不知是什么原因

 
控件的名称即name值不能在运行期改变,你已经建立的控件,并指定相应的属性了
如需要该名,则必须把刚才创建的控件Free,再建立新的控件
 
命名是可以,不过没什么大用,一般都这样
with Tlabel.create do
parent:=....
font:=...
onclick:=....
color:=....
 tag:=.... //常常用这个标记来访问
....
end;

如果一定要命名的话,一般是配合findcomponent来遍历查找的

name:='aaa';
if findcomponent('aaa') do
 
不是一定要命名,是动态生成的控件没有名字,如上面问题中的fPanel生成后的名字为onnamed,
因此就无法运行该控件.
 
给你一段完整的代码吧,我是按照你的要求写的,如果不对你再告诉我.
var
Panel1: TPanel;
Label1: TLabel;

Panel1 := TPanel.Create(Self);
Label1 := TLabel.Create(Self);
with Panel1 do
begin
Name := 'Panel1';
Parent := Self;
Left := 96;
Top := 92;
Width := 325;
Height := 197;
Caption := 'Panel1';
TabOrder := 0;
end;
with Label1 do
begin
Name := 'Label1';
Parent := Panel1;
Left := 56;
Top := 44;
Width := 93;
Height := 53;
Caption := 'Label1';
end;
以上代码中变量定义你放在其它部分,然后把其余代码放在窗体的Create事件中即可,我已调
试通过,是不是能满足你的要求
 
其實你不需要對控件命名的, 它只有Design time來決定在Form上相對應的變量名稱而已,
如在控件內部動態創建, 不需指定Name
 
我的问题是:
新建一个类,从TWINCONTROL继承,在其中我要动态创建一个TPANEL或其它什么的窗口控件
可是创建后的控件没有名字青一色的UNNAMED,无法运行该控件
谢谢各位的帮助!
 
起个名字不就是了,我上面写的不是有名字吗,不行把你的这段代码发给我.我调一调

 
fLabel:TLabel;
fPanel:=Tpanel.create(self);
for I:=1 to 10 do
begin
fLabel := TLabel.create(Owner)
//这新生成的LABEL要怎样命名呢?
fLabel.parent := fPanel;
fLabel.name := 'MyLabel1'
//在创建第二个时与刚才创建的第一个重名
end;


可以改为
flabel.name:='mylabel'+inttostr(i);'
 
你改他的名干吗?
每一个控件都有一个Tag,改他不就什么事都可以解决了吗?
 
最好是用控件数组来控制!
 
to qq74
你所说的:"无法运行该控件"是什么现象?你确信这个问题是因为动态生成的控件没有Name值引起的吗?
如果是显示不出来的话,可能是TWinControl类的Parent属性没有设置引起的。
 
同意:张无忌的说法
本人现在就是用得这个,产生的有 Label,CheckBox,Edit。
然后用tag标识访问
 
后退
顶部