??? 如何控制一个控件的 NAME??(60分)

  • 主题发起人 主题发起人 brilliant83
  • 开始时间 开始时间
B

brilliant83

Unregistered / Unconfirmed
GUEST, unregistred user!

我有相同的几个Edit 控件,命名为 Edit1,Edit2,Edit3,……
具体使用的Edit由变量 Number而定,如果我要把一些不同字符串赋值给
Number个Edit控件, 用for应该怎么编写,
for i:=1 to number do
begin
().TEXT:=string;
end;
因为左边括号里是一个Tobject,而右边是一个String,是不是要定义一个函数,
请问应该怎么解决,谢谢!!
 
findComponent
 
to tseug:
可不可以具体一点啊,写一些代码,我对这个回答不太明白,谢谢!
 
for i:=1 to 10 do
TEdit(FindComponent('Edit'+IntToStr(i))).text:='hehe';
 
var i : integer;
begin
for i := 0 to self.ComponentCount - 1 do begin
if self.components is Tedit then
TEdit(self.components).text := 'test string';
end;
end;
 
To :楼上兄弟;
用.tag 做数组。
var i : integer;
begin
for i := 0 to self.ComponentCount - 1 do begin
if (self.components is Tedit) and (Tedit(self.components).tag=i) then
//这样要实用些。
TEdit(self.components).text := 'test string';
end;
end;
 
procedure TForm1.Button5Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to ComponentCount -1 do
showmessage(Components.Name);

end;
 
谢谢各位,不过我用了还是有问题,我找不出问题所在,还得请大家帮忙

我在代码中输入了
TEdit(FindComponent('Edit'+inttostr(i))).text:='HEHE';

结果Edit(i) 中都是空白,没有数据

然后我用TEdit.Create(Self).Name:='Edit'+inttostr(i);
TEdit(FindComponent('Edit'+inttostr(i))).text:='HEHE';
结果提示我Edit(i)已经存在,但其中还是空的,这到底是什么原因,
既然存在,为何不能够显示呢?/?
 
for i:=1 to 40 do (FindComponent('Edit'+inttostr(i))as TEdit).text := '0';
 
如果是设计期放的控件,用tag做下标是正解,
如果是动态生成的,用控件数组。
拼装控件名的是歪门邪道。
 
原因可能有两个:
1.因为你的Edit是动态创造的Name属性没有命名,你用名字来找这个控件当然找不到了.
2.或者你的控件的拥有者不是不对.你应该用拥有者的FindComponent方法.
例如:
Edit1:=TEdit.Create(Form1);///拥有者是Form1
那么就用该用
for i:=1 to 40 do (Form1.FindComponent('Edit'+inttostr(i))as TEdit).text := '0';
如果是设计期间创造的,拥有者就是当前窗体.可以用
for i:=1 to 40 do (FindComponent('Edit'+inttostr(i))as TEdit).text := '0';
劝你用Edit的容器的FindChildControl方法来查找,会快不少.因为这样的话再查找时就会忽略
非TControl控件,和其他不在自己容器的所有控件.
例如你的Edit都在Panel1上
for i:=1 to 40 do (Panel1.FindChildControl('Edit'+inttostr(i))as TEdit).text := '0';
 
我在http://delphiyd.xilubbs.com/里见类似的问题。有人回复用TForm的Controls和ControlCount属性
 
后退
顶部