Autor Beitrag
Camulus
Hält's aus hier
Beiträge: 11

Win 2000, Win XP
Borland Delphi 6
BeitragVerfasst: Do 07.09.06 15:11 
Hallo
wir haben hier folgendes Problemchen.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 08.09.06 01:28 
könntest du kurz beschreiben, was das programm tun soll und was t ist?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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:
ausblenden 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 ;-)

_________________
We are, we were and will not be.
Camulus Threadstarter
Hält's aus hier
Beiträge: 11

Win 2000, Win XP
Borland Delphi 6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 628
Erhaltene Danke: 1



BeitragVerfasst: 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

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


geht das nicht, während

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


damit keine Probleme hat.
Jetstream
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222



BeitragVerfasst: Fr 08.09.06 12:07 
ausblenden 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 ?

_________________
Die folgenden Klangbeispiele sind Ergänzungen zum methodischen Aufbau der Textbeilage und dürfen nicht losgelöst von dieser behandelt werden.