比如,在Panel1上有多个控件,控件为动态产生,有一个控件名为"aEdit",下面1语句是正确的,Str1不是空值,而2语句Str1为空值,不知道为什么?
1、 for i := 0 to Panel1.ControlCount-1 do
begin
if Panel1.Controls[i].Name = 'aEdit' then
Str1 := TEdit(Panel1.Controls[i]).Text;
end;
2、Str1 := TEdit(Panel1.FindComponent('aEdit')).Text;
1、 for i := 0 to Panel1.ControlCount-1 do
begin
if Panel1.Controls[i].Name = 'aEdit' then
Str1 := TEdit(Panel1.Controls[i]).Text;
end;
2、Str1 := TEdit(Panel1.FindComponent('aEdit')).Text;
if Panel1.FindComponent('aEdit') is TEdit then
begin
str1 := (Panel1.FindComponent('aEdit') as TEdit).Text;
end;你将你的Panel1 换成你的 Form名称试试
aEdit:TEdit;
begin
aEdit:=TEdit.Create(Panel1);
aEdit.Parent:=Panel1;
aEdit.Name:='aEdit';
Str1 := TEdit(Panel1.FindComponent('aEdit')).Text;
showmessage(str1);
end;
2、Str1 := TEdit(FindComponent('aEdit')).Text;
Str1 := TEdit(Panel1.FindComponent('aEdit')).Text;
Str1 := TEdit(FindComponent('aEdit')).Text;
从理论上讲上面这两个语句都可以,按照linzhengqun(风)的动态创建法,需要第一语句才能得到Text,而第二语句是空值。
而这样的创建法:
aEdit:=TEdit.Create(Self);
aEdit.Parent:=Panel1; 或者Panel1.InsertControl(aEdit);
aEdit.Name:='aEdit';
需要第二语句才能得到Text,而第一语句是空值。但我好象与创建方法无关,需用:
for i := 0 to Panel1.ControlCount-1 do
begin
if Panel1.Controls[i].Name = 'aEdit' then
Str1 := TEdit(Panel1.Controls[i]).Text;
end;
才能得到Text,我检查了一个下午,不知道什么原因?请指教!谢谢!
begin
if self.components[i].Name = 'aEdit' then
Str1 := TEdit(self.comoponenets[i]).Text;
end;