AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

For in For dann Goto

Ein Thema von demic · begonnen am 15. Mär 2011 · letzter Beitrag vom 16. Mär 2011
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: For in For dann Goto

  Alt 16. Mär 2011, 13:50
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...
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: For in For dann Goto

  Alt 16. Mär 2011, 14:01
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;
  Mit Zitat antworten Zitat
demic
(Gast)

n/a Beiträge
 
#3

AW: For in For dann Goto

  Alt 16. Mär 2011, 16:56
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:
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;
Ich rufe an den nötigen Stellen die Prozedur 3x auf.
Delphi-Quellcode:
CheckGridCell(Grid1);
CheckGridCell(Grid2);
CheckGridCell(Grid3);
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.

Auch Danke für den Tipp, zum einfügen von Delphi-Code.

Gruß
Michael
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 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