所以我创建了一些这样的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函数中做错了什么?
答案 0 :(得分:3)
您没有为Owner
控件分配TEdit
,因此FindComponent()
无法找到它们。将Self
指定为所有者(因为您正在调用Self.FindComponent()
),或者将TEdit
指针存储在您可以循环的TList
或TObjectList
中需要时。