Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Code vereinfachen (with do) Problem


Hirb - So 01.11.09 15:48
Titel: Code vereinfachen (with do) Problem
Ich würde gerne meinen Code etwas vereinfachen/verkürzen bzw. nicht so viel wiederholen. Hier z.B. möchte ich einige Elemente ein und ausblenden und es nicht für jedes Element einzeln schreiben. also nicht so:

Delphi-Quelltext
1:
2:
3:
4:
1 label2.visible:=true;
2 label3.visible:=true;
3 label4.visible:=true;
...

Ich habe versucht es mit with ... do ... zu machen, jedoch verwendet er immer nur das letzte also in dem unten genannten Fall wird, dann nur mit edit4 visible:=true gemacht. Meine Frage ist jetzt, wie ich das richtig machen kann.

Delphi-Quelltext
1:
2:
3:
4:
1      with label2, label3, label4, label5, label6, edit1, edit2, edit3, edit4 Do
2      begin
3          visible:=true;
4      end;

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am So 01.11.2009 um 15:13


Marc. - So 01.11.09 16:11

Hi und :welcome: im Forum!

Es gibt mehrere Möglichkeiten:
o FindComponent() + For-Schleife
o Objekte in einem Array ablegen (Vorteil: Gestattet den Komponenten sinnvolle Namen zu geben)
o Verwendung eines Frames, Tabsheets etc.


jaenicke - So 01.11.09 16:13

Hallo und :welcome: !

Das with ist dafür gedacht, dass man auf Kosten der Lesbarkeit z.B. das Label weglassen kann, sich die Befehle dann also automatisch darauf beziehen. Das erkauft man sich zwar mit Unübersichtlichkeit und schwer zu findenden Fehlern, aber manchen ist das eben egal.

Beispiel für with:

Delphi-Quelltext
1:
2:
3:
4:
5:
with LabelX do
begin
  Caption := 'Hallo';
  Left := 100;
end;
Beides wird dann auf den Label bezogen.

Für die andere Richtung, also den selben Befehl auf mehrere Komponenten anzuwenden, ist with nicht gedacht oder geeignet. Wie es dort geht, hat user profile iconMarc. ja bereits geschrieben.


Hirb - So 01.11.09 16:16

ok danke erstmal für die Hilfe, jedoch wäre ein kurzes Beispiel in Codeform für das oben genannte Problem wirklich sehr hilfreich, da ich noch wenig Erfahrung mit Delphi habe.

bzw. ist das überhaupt sinnvoll für solche kleinen Sachen ein irgendwas davon anzulegen?

o FindComponent() + For-Schleife
o Objekte in einem Array ablegen (Vorteil: Gestattet den Komponenten sinnvolle Namen zu geben)
o Verwendung eines Frames, Tabsheets etc.