Problem mit FindComponent()

Ich will die Eigenschaft Caption eines Labels in der Klasse Form6 der Eigenschaft Caption eines Labels in der Klasse Form3 zuordnen.
Das geht normalerweise so:
Form3.Label1.Caption:=Form6.Label1.Caption

Nun will ich das für viele Labels machen und der Einfachheit halber mit dem Befehl FindComponent arbeiten. Also so in der Art:
for i:=1 to 10 do
with Form3 do
TLabel(FindComponent(‚Label‘+IntToStr(i))).Caption:= ???TLabel(FindComponent(‚Label‘+IntToStr(i))).Caption;

Wie schaffe ich es nun, dass er die Komponente nach ‚:=‘ in Form6 sucht?

Danke. Anka

Hi Anka,

wie in der Online-Hilfe nachzulesen ist „FindComponent“ eine Methode der Klasse „TComponent“, und da jedes Formular auch ein Objekt vom Typ „TComponent“ ist (der Pfad im Hierarchiebaum ist: TObject -> TPersistent -> TComponent -> TControl -> TWinControl -> TScrollingWinControl -> TCustomForm -> TForm), mußt Du in Deinem Code einfach nur die FindComponent-Aufrufe den entsprechenden Forms zuordnen:

for i := 1 to 10 do
 begin
 LabelName := 'Label'+IntToStr(i);
 TLabel(Form3.FindComponent(LabelName)).Caption
 := TLabel(Form6.FindComponent(LabelName)).Caption
 end;

Auf das schöne „WITH … DO“ verzichtest Du hier besser. Allgemeine Empfehlung: Es ist zwar richtig, daß man mit dem „WITH … DO“ kompakteren Code schreiben und einige Tipparbeit sparen kann, aber es neigt auch dazu, Unklarheit in den Code zu bringen, weil man oft erst überlegen muß, was genau alles nun von einem bestimmten „WITH“ „betroffen“ ist (und dieser Nachteil wiegt in meinen Augen schwerer als die Schreibarbeitsersparnis). Ich verwende es nur noch in Ausnahmefällen.

Ich hoffe, ich konnte Dir helfen.

Mit freundlichem Gruß
Martin

DANKE, es hat mir geholfen.

Anka

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]