根据组件名称获取组件文本

时间:2014-08-14 06:00:42

标签: delphi components

所以我创建了一些这样的TEdit组件

var
  lb : TLabel;
  topLabel, i: Integer;
  dbedit : TEdit;
begin
  inherited;
  topLabel := 40;
  i := 0;
  lb := TLabel.Create(nil);
  lb.Parent := GroupBox2;
  lb.Left := 245;
  lb.Top := 20;
  lb.Caption := 'ASD';
  with  DataModule.myStoredProc do begin
       Close;
       ParamByName('@Param1').AsInteger := 1;
       ExecProc;
       Open;
       SetLength(nrPozitiiDinctionar,RecordCount);
       First;
       while not Eof do begin
           lb := TLabel.Create(nil);
           lb.Parent := GroupBox2;
           lb.Left := 7;
           lb.Top := topLabel  ;
           lb.Caption := FieldByName('X').AsString;
           dbedit := TEdit.Create(nil);
           dbedit.Name := 'Edit'+IntToStr(FieldByName('Poz').AsInteger);
           dbedit.Text := '';
           dbedit.Parent := GroupBox2;
           dbedit.Height := 21;
           dbedit.Width := 40;
           dbedit.Left := 240;
           dbedit.Top := lb.Top-3 ;
           topLabel := topLabel + 30;
           nrPozitiiDinctionar[i] := FieldByName('Poz').AsInteger;
           i := i + 1;
           Next;
       end;

  end;

end;

然后在用户添加他的输入后,我运行一个带有此代码的函数

 var
  IDPoz, I : Integer;
  dbedit : TEdit;
  pctj,nume : string;
   begin
      for I := Low(nrPozitiiDinctionar) to High(nrPozitiiDinctionar)  do
         begin
           nume := 'Edit'+IntToStr(nrPozitiiDinctionar[i]);
           pctj := TEdit(FindComponent('Edit'+IntToStr(nrPozitiiDinctionar[i]))).Text;
           with DateCOFurnizori.spCOFCmzFurnizoriEvaluarePozitii_Edit do begin
           ParamByName('@IDEvaluare').AsInteger := StrToInt(Edit1.Text);
           ParamByName('@IDPozitie').AsInteger := IDPoz;
           ParamByName('@DictionarID').AsInteger := 9103;
           ParamByName('@DictionarPozitiiID').AsInteger := nrPozitiiDinctionar[i];
           ParamByName('@Punctaj').AsFloat :=  1 ;//StrToFloat(pctj) ;
           ParamByName('@DataEvaluare').AsDateTime := Now;
           ExecProc;
           IDPoz := IDPoz + 1;
         end;
 end;

这只是代码的一部分,但这应该与我的问题有关。

当我使用调试器时,pctj中没有值,我做错了什么?我尝试根据名称获取TEdits的值。我在FindComponent函数中做错了什么?

1 个答案:

答案 0 :(得分:3)

您没有为Owner控件分配TEdit,因此FindComponent()无法找到它们。将Self指定为所有者(因为您正在调用Self.FindComponent()),或者将TEdit指针存储在您可以循环的TListTObjectList中需要时。