Het is een beetje moeilijk inschatten zonder de exacte context te weten, maar pPersoonlijk ben ik er nooit zo dol op om dynamisch componenten op hun naam als string aan te spreken; uit ervaring weet ik dat je jezelf er uiteindelijk alleen maar mee in de vingers snijdt en het juist gebruiksonvliendelijker wordt.
Je kunt IMHO componenten beter (wel op naam, maar niet op string) direct opgeven als parameter van een functie of procedure.
Voorbeeld:
Delphi Code:
procedure SetControlValue(const AControl: TControl; AValue: string);
begin
if AControl is TEdit then
TEdit(AControl).Text := AValue
else
if AControl is TCheckBox then
TCheckBox(AControl).Checked := StrToBool(AValue)
else
if AControl is TDateTimePicker then
case TDateTimePicker(AControl).Kind of
dtkDate: TDateTimePicker(AControl).Date := StrToDate(AValue);
dtkTime: TDateTimePicker(AControl).Time := StrToTime(AValue);
end
// else
// if AControl is Txxxxxx then
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetControlValue(Chk_050520, 'True');
SetControlValue(Edt_050520, 'Dit is een edit');
SetControlValue(DTP_050520, '2023-01-30');
end;
Alleen wanneer je de componenten uit bijvoorbeeld een dataset (of inifile oid) wilt zetten, dan heb je geen andere mogelijkheid dan met de daadwerkelijke naam als string te werken, maar dan kun je eventueel gebruik maken van de streamingmogelijkheden die ieder component al bezit of de al eerder genoemde "FindComponent".
Bookmarks