Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit For..in Schleife
jasocul - Di 04.02.14 09:42
Titel: Problem mit For..in Schleife
Ich "experimentiere" gerade mit der for..in Schleife und wollte eine alte Schleife dadurch ersetzen. Nach dem, was ich zu dieser Schleife gelesen habe, sollte folgendes mMn funktionieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Initialisierung; var MyComp : TComponent;
begin for MyComp in Components do begin ... end; end; |
Ich bekomme aber die Meldung:
Zitat: |
[DCC Fehler] Main.pas(92): E2029 '[' erwartet, aber 'DO' gefunden |
Ein GetEnumerator existiert laut DOH.
Weiß jemand, warum das nicht funktioniert und kann mir erklären, was ich falsch mache? Oder geht das in bestimmten Fällen einfach nicht?
Mein Programm läuft auch ohne diese Änderung einwandfrei. Mir geht es nicht darum, welches Schleifenkonstrukt besser oder schlechter ist und ob man unbedingt etwas umstellen muss. Ich möchte einfach nur wissen, was das Problem ist.
jaenicke - Di 04.02.14 09:52
jasocul hat folgendes geschrieben : |
Ein GetEnumerator existiert laut DOH. |
Das kann nicht sein, denn Components ist eine indizierte Property, darin kann es nicht existieren.
Das GetEnumerator existiert in TComponent. Dementsprechend im Formular selbst. Deshalb musst du das auch so schreiben:
jasocul - Di 04.02.14 09:59
:autsch:
Da hätte ich auch selbst drauf kommen können. Danke.
jaenicke - Di 04.02.14 10:49
Nebenbei habe ich eine Zusatzfunktion als Classhelper geschrieben, bei dem du den Typ angeben kannst. Das sieht dann so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TComponentHelper = class helper for TComponent function GetComponents<T: class>: TArray<T>; overload; function GetComponents<T: class>(const AFilterFunc: TComponentListFilterFunc<T>): TArray<T>; overload; end;
for CurrentButton in Self.GetComponents<TButton> do CurrentButton.Caption := 'Foo'; |
Auch eine Filterfunktion kann man so direkt übergeben.
jasocul - Di 04.02.14 11:05
Gute Idee.
Meistens will man ja nur bestimmte Komponenten verarbeiten. :zustimm:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!