![]() |
AW: For in For dann Goto
Und warum nicht so:
Delphi-Quellcode:
?
var
boBreak:Boolean; begin for a := 0 to 10 do begin for b := 0 to 20 do begin ... if ... then begin boBreak:=True; Break; end; end; if boBreak then break; if ... then Break; end; end; |
AW: For in For dann Goto
Zitat:
![]() Besonders hervorheben möchte ich folgenden Absatz: Zitat:
Gruß, Sven |
AW: For in For dann Goto
Es ist hier doch überhaupt nicht das Problem, wenn die Schleife via Goto verlassen wird. Das Problem ist, dass der Code hinter dem Label auch ausgeführt wird, wenn die Bedingung vor dem Goto niemals zutrifft! Von daher ist diese Warnung mit diesem Wortlaut auch völlig korrekt - das hatte ich aber auf Seite eins schon gesagt. Das und NUR das ist das konkrete Problem, von all der Goto-Diskussion unberührt, die natürlich wieder auf 3 Seiten breit gezogen werden musste, weil man es ja so selten und unzureichend bespricht...
|
AW: For in For dann Goto
Statt dem GOTO könnte man eine Sub-Procedure aufrufen und hätte dann das Problem mit dem ereignislosen Scheifendurchlauf auch gleich gelöst:
Delphi-Quellcode:
procedure Something;
procedure OnlyIfTrue; begin // end; var a,b : IntegerM begin for a := 0 to 10 do for b := 0 to 20 do if True then begin OnlyIfTrue; Exit; end; end; |
AW: For in For dann Goto
Hallo,
so viele Nachrichten... alles wegen Goto :) Also "PRINT" und "GOTO" waren die ersten Befehle die ich gelernt hatte... zumindest auf dem C64 :) Aber erst mal Danke für die vielen Vorschläge. Ich hatte den Code vereinfacht. Der richtige Code behandelt 3 StringGrids, sprich nach dem ersten Doppel-FOR das gleiche noch 2x, deshalb ist ein EXIT nicht auf einfacher Weise möglich. Zu der "If Prüfung Then Goto ForEnd"... es ist eine Prüfung die 100% eintritt aber das weis Delphi ja nicht, deshalb wohl die Warnung. Ich bin heute auf folgende Idee gekommen. Hier der richtige Code:
Delphi-Quellcode:
Ich rufe an den nötigen Stellen die Prozedur 3x auf.
Procedure TForm1.CheckGridCell(DG : TmyGrid);
Var NCol,NRow,i : LongInt; Begin With DG Do Begin SelPaint := False; For NCol := 0 to ColCount-1 Do Begin For NRow := 0 to RowCount-1 Do Begin i := (NCol*(RowCount)) + NRow; If ACell = Dirlist[i].Name Then Begin Row := NRow; Col := NCol; If ShowStyle = ssFull Then begin if row < toprow then toprow := row else if row > toprow+visiblerowcount-1 then toprow := row-visiblerowcount+1; end; SelPaint := True; RePaint; Exit; End; End; End; End; End;
Delphi-Quellcode:
Mit der Parameterübergabe hat der Inhalt der Prozedur auch weniger Zeilen und ein EXIT kann ich so einsetzen. Warnungen gibt's von Delphi so auch nicht mehr.
CheckGridCell(Grid1);
CheckGridCell(Grid2); CheckGridCell(Grid3); Auch Danke für den Tipp, zum einfügen von Delphi-Code. Gruß Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:24 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