Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Listbox - Seletierte Einträge

  Alt 12. Aug 2003, 16:14
Mal eine etwas ausführlichere Begründung, warum man nicht Elemente einer Liste in einer vorwärts-laufenden Schleife löschen kann - bzw. warum es zu Exception kommt.

Wenn die Schleife gestartet wird, speichert Delphi im ECX-Register die Gesamtzahl der Iterationen für die Schleife. Das ist eine Optimierung um schnell zu sein. Dieses Register wird mit jedem Durchlauf heruntergezählt und nicht neu überprüft. Werden jetzt während des Durchlaufes Elemente gelöscht, so will Delphi immer noch alle ursprünglich vorhandenen Elemente durchlaufen... Index out of Bounds.

Wer unbedingt vorwärts durch die Schleife luafen muss, sollte es mit einer while Schleife lösen:
Delphi-Quellcode:
var I: Integer;
...
  I := 0;
  while I < Items.Count-1 do
  begin
    ......
    Inc(I);
  end;
...
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat