![]() |
With ... do Anweisungen....
So habe mir mal gedacht ich mache meine 30 Labels alle auf einmal leer, aber scheiße was...
Delphi-Quellcode:
Aber geändert wurde nur das letzte Label :gruebel:
procedure TForm1.Button1Click(Sender: TObject);
begin with Label1, Label2, Label3 {...Hier gings noch weiter :) ...} do Caption := ''; end; Ich hatte gedacht der macht das mit allen... :wink: Wie bokomm ich das hin das er alle 30 Label leer macht? ohne jedes einzelne leer zu machen? MFG Keda |
Re: With ... do Anweisungen....
Stichwort für die Suche heißt:
![]() |
Re: With ... do Anweisungen....
Cool sowas hab ich schon immer gesucht, zwar net in dem zusammenhang aber das kann man ja öfters brauchen =)
aber trotzdem is das doch komisch das der das bei der with ... do Schleife net macht oder? Was ist wenn ich mit mehreren Objecten arbeite, die zufällig die selbe methode haben? dann wird die letzte angegebene benutzt und die andere net obwohl ich die eigendlich meinte... Verwirrend...
Delphi-Quellcode:
ist ja genau das selbe wie:
procedure TForm1.Button1Click(Sender: TObject);
begin With Label1 do With Label2 do With Label3 do With Label4 do Caption := 'geändert'; end;
Delphi-Quellcode:
Geändert wird aber immer das letzte...
procedure TForm1.Button1Click(Sender: TObject);
begin With Label1, Label2, Label3, Label4 do Caption := 'geändert'; end; Aber warum baut Borland sowas für mehrere ein, wenns verbugt ist? (Jedenfalls nach meiner meinung....) Hätten sie wenigstens verständlich in die Hilfe schreiben können... Oder versteht ihr das? Zitat:
:D MFG Keda |
Re: With ... do Anweisungen....
with-do ist eben kein for-each.
Stell Dir with-do als Namensraum/Scope vor, der verwendet werden soll. Die Aufzählung ist nur eine Vereinfachung um nicht...
Delphi-Quellcode:
...schreiben zu müssen.
with foo do
begin with bar do begin //... end; end; |
Re: With ... do Anweisungen....
Zitat:
with ist nicht dazu da, um mehrere Objekte gleicher Klasse auf einmal zu behandeln, sondern lediglich zur Vereinfachung des Schreibens. Anstelle von:
Delphi-Quellcode:
ermöglicht with:
Object1.DoThis;
Object1.DoThat; Object1.DoSometingElse; Object1.DoNothing;
Delphi-Quellcode:
Das und nur das macht with. Für deinen Zweck brauchst du FindComponent, oder du erzeugst deine Labels von vorne herein in einem array of TLabel von Hand, und nicht im Formulardesigner. Dann kannst du mit einer for-Schleife über deine Labels iterieren.
with Object1 do
begin DoThis; DoThat; DoSometingElse; DoNothing; end; Mit Bug-Vorwürfen wäre ich ganz vorsichtig... :zwinker: gruss, Fabian btw: Das Verwenden von mehreren Objekten in with wird im allgemeinen als schlechter Stil angesehen, da man so gut wie garnicht mehr nachvollziehen kann welche Property sich denn nun anuf welchen Objekt bezieht. Bei typgleichen Objekten ists noch einfach: Immer das letzte in der Liste. Aber sonst kann es echt grausam werden. (Wird's je nach Code auch schon mit nur einem Objekt und anderen Feldern der aktuellen Klasse die wohlmöglich gleich heissen.) |
Re: With ... do Anweisungen....
für sowas nehm ich sie ja auch, aber bei mehrfachen ineinander Anwendungen der With...do - Anweisung kann es passieren, dass es nicht macht was es soll :)
Das an sich ist ja nicht schlimm, aber das man net mal irgendwo darauf hingewiesen wird ist dumm... Und wenn man net aufpast baut man so Fehler ein weil man schon müde ist und am nächsten Tag findet man ihn einfach net :) Für mich ist die Sache nu eigendlich gegessen, da ich ja nun weiß das es so nicht geht :) MFG Keda |
Re: With ... do Anweisungen....
Zitat:
Delphi-Quellcode:
Wüsstest du jetzt ohne immer nachschauen zu müssen, dass "Florida" sich auf "One" bezieht, und "Birmingham" auf "Two", und vor allem "Paris" auf "Two", aber nur, weil es als letztes in der Liste steht?
type
TOne = class Florida: Integer; Paris: Integer; end; TTwo = class Birmingham: Byte; Paris: Integer; end; . . . var One: TOne; Two: TTwo; . . with One, Two do begin // --> viele Zeilen Code hier <-- Florida := 12; Paris := 8; Birmingham := 3; end; Ich denke, dass man dafür keinen Hinweis braucht, sondern das ist einfach eine logische konsequenz dieses Konstruktes. Alle Objekte der Liste bearbeiten haut nicht hin, da with ja (leider) kein Iterator ist wie das neue for each, dass ja noch kommt. Zitat:
Guts Nächtle, Fabian :drunken: \\edits: Hatte mich erst verlesen -> inhaltliche Korrektur *imhalbschlafbin* |
Re: With ... do Anweisungen....
Asche über mein Haupt :drunken:
Nu weiß ich es Dizzy :) Aus Fehlern lernt man ja bekanntlich, oder besser sollte man :) Wie ist das eigendlich wenn zwei Klassen ne Eigenschaft mit gleichen Namen, aber unterschiedlichen Typen haben? Sucht der sich dann das richtige aus? müßte er ja oder? MFG Keda |
Re: With ... do Anweisungen....
Zitat:
(Wollte nicht unfreundlich daher kommen; falls es so klang *beteuer*) Zitat:
Wäre also nett von Delphi, wenn es das täte, aber auf der anderen Seite auch wieder gemein, da es die Verwendung von "with" in dieser Art und Weise auch noch fördern würde ;). with freundlichem Gruß ( 8) ) Fabian |
Re: With ... do Anweisungen....
Hmm da es jetzt schon so früh ist, werd ich das nu auch net mehr testen :)
Die Ampel-Anlage hat mich schon ganz schön in beschlag genoommen :) Mal schaun ob ich Heute nochmal zeit für finde, dann poste ich mein Ergebniss :P MFG Keda |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz