比如,在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.   

    一般还是这样比较安全点
    if Panel1.FindComponent('aEdit') is TEdit then
    begin
      str1 := (Panel1.FindComponent('aEdit') as TEdit).Text;
    end;你将你的Panel1 换成你的 Form名称试试
      

  2.   

    var str1:string;
        aEdit:TEdit;
    begin
     aEdit:=TEdit.Create(Panel1);
     aEdit.Parent:=Panel1;
     aEdit.Name:='aEdit';
     Str1 := TEdit(Panel1.FindComponent('aEdit')).Text;
     showmessage(str1);
    end;
      

  3.   

    >>2、Str1 := TEdit(Panel1.FindComponent('aEdit')).Text;改为:
    2、Str1 := TEdit(FindComponent('aEdit')).Text;
      

  4.   

    各位朋友好!
    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,我检查了一个下午,不知道什么原因?请指教!谢谢!
      

  5.   

    for i := 0 to self.componentcount-1 do
      begin
         if self.components[i].Name = 'aEdit' then
           Str1 := TEdit(self.comoponenets[i]).Text;
       end;
      

  6.   

    刚才打字出问题了!不能修改!应该改成:strl:=Tedit(self.components[i]).text