Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#12

Re: Listbox - Seletierte Einträge

  Alt 12. Aug 2003, 17: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 Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat