Entwickler-Ecke

Sonstiges (Delphi) - For Endevariable im Forblock verändern


Camulus - Do 07.09.06 15:11
Titel: For Endevariable im Forblock verändern
Hallo
wir haben hier folgendes Problemchen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for i := 0 to anz_zeilen_1 do
    begin
      if GridView1.Cells[2, i] = 'true' then
      begin
        GridView2.AddRow();
        GridView2.Cells[0, t] := GridView1.Cells[0, i];
        GridView2.Cells[1, t] := GridView1.Cells[1, i];
        anz_zeilen_1 := anz_zeilen_1 - 1;  //warum wird diese Zeile nicht durchlaufen ???
        GridView1.DeleteRow(i);
      end;


Kann mir/uns einer verraten woran das liegt? Oder ist das ein Bug

Delphiversion: 6 Pro

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


sarsel - Fr 08.09.06 01:28

könntest du kurz beschreiben, was das programm tun soll und was t ist?


Gausi - Fr 08.09.06 08:40

Ich weiß zwar nicht genau, ob diese Zeile ausgeführt wird, nehme aber an, dass die for-Schleifen-Grenzen zu Beginn festgelegt werden und nicht verändert werden können.

Dein Problem (es kommt ne Zugriffsverletzung, oder?) kann man aber so lösen:

Delphi-Quelltext
1:
2:
for i := anz_zeilen_1 downto 0 do
//...

Dann hat man zwar im anderen Grid eine umgekehrte Reihenfolge, aber das bekommt man bestimmt auch irgendwie in den Griff ;-)


Camulus - Fr 08.09.06 10:43

Naja... eben nicht. Es kommt garkeine Meldung. Es passiert garnichts. Die Zeile wird einfach übersprungen und ich/ wir wüssete/n gerne warum?!?


Allesquarks - Fr 08.09.06 10:50

Die for Schleife ist leider sehr statisch. Und leider wird sie in der Schule auch noch so hochgelobt und als primärschleife beigebracht. Man darf weder die Grenzen verändern noch den Schleifenzähler. MAn sollte sie abschaffen!!!!

Benutz mal ne while oder ne repeat Schleife. Da geht das alles!!

P.S. Es lebe goto!!


wdbee - Fr 08.09.06 11:11

Meist reicht es, die FOR-Schleife rückwärts zählen zu lassen.

In Fällen, bei denen z. B. aus einer Liste Elemente in der Schleife gelöscht werden, ändert sich neben der Anzahl auch die Position der Elemente, wenn vorhergehende gelöscht werden.

Mit


Delphi-Quelltext
1:
for I := 0 to Anzahl - 1 do                    


geht das nicht, während


Delphi-Quelltext
1:
for I := Anzahl - 1 downto 0 do                    


damit keine Probleme hat.


Jetstream - Fr 08.09.06 12:07
Titel: Re: For Endevariable im Forblock verändern

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
i:=-1;
repeat 
    inc(i);
    if GridView1.Cells[2, i] = 'true' then
    begin
      GridView2.AddRow();
      GridView2.Cells[0, t] := GridView1.Cells[0, i];
      GridView2.Cells[1, t] := GridView1.Cells[1, i];
      anz_zeilen_1 := anz_zeilen_1 - 1;
      GridView1.DeleteRow(i);
    end;
until i >= anz_zeilen_1;


So in etwa ?