Hallo,
Ich will aus meiner ListBox alle doppelten einträge entfernen. Zuerst wollte ich folgenden Algorithmus nehmen, also einen zeiger auf einen eintrag, und alle anderen nachfolgenden einträge auf gleichheit überprüfen, wenn gleich löschen:
Delphi-Quelltext
1: 2: 3: 4:
| for n := 0 to ListBox1.Items.Count -2 do for i := (n + 1) to ListBox1.Items.Count -1 do While ListBox1.Items.Strings[n] = ListBox1.Items.Strings[i] do ListBox1.Items.Delete(i); |
Aber da kommt immer der Fehler, dass ich das Maximum überschreite (Exception).
Vielleicht denken sich manche: So ein depp, das ist doch klar, weil der Fehler an meinem Code liegt!
Aber ich weiß leider nicht woran der Fehler liegt. Kann es sein, dass in einer for-Schleife der Endwert, in meinem Fall "ListBox1.Items.Count ...", nicht aktuellisiert wird, sondern immer gleich bleibt?
Ich wollte als alternative folgendes nehmen: alle Duplikate von Einträge werden auf '' gesetzt, und anschließend werden alle '' gelöscht.
Das ist zwar nicht die optimale lösung. Ich wollte es dann also so machen:
Delphi-Quelltext
1: 2: 3: 4:
| for n := 0 to ListBox1.Items.Count -2 do for i := (n + 1) to ListBox1.Items.Count -1 do if ListBox1.Items.Strings[n] = ListBox1.Items.Strings[i] then ListBox1.Items.strings[i] := ''; |
Aber Hilfe!! Nun hängt er in einer Endlos-Schleife! Warum?
Ich hoffe wirklich ihr könnt mir helfen.