Du müsstest die Suche mit einer while Schleife machen, nicht mit einer for Schleife. Angenommen deine Liste enthält 6 Einträge, dann läuft die Schleife von 0 bis 5. Wenn du jetzt einen Eintrag löschst und dann versuchst auf eintrag Nummer 5 zuzugreifen, dann überschreitest du das Maximum der Liste.
Oder probiers mal so (mir ist immer noch nicht so ganz klar warum du alles in eine Schleife setzt, das ListBox1.Clear und den Rest musst du nur einmal machen):
Delphi-Quellcode:
procedure TForm1.IdIRC1Part(Sender: TObject; AUser: TIdIRCUser;
AChannel: TIdIRCChannel);
var Counter: integer;
Gefunden: Boolean;
begin
Gefunden:=False;
for Counter := 0 to sl1.Count-1 do
if sl1.Strings[Counter] = auser.Nick then
begin
Gefunden:=True;
break;
end;
if Gefunden then
begin
sl1.Delete(Counter);
Listbox1.Clear;
if sl1.Count > 0 then
Listbox1.Items.AddStrings(sl1);
if sl2.Count > 0 then
Listbox1.Items.AddStrings(sl2);
end; // if Gefunden
Gefunden:=False;
for Counter := 0 to sl2.Count-1 do
if sl2.Strings[Counter] = auser.Nick then
begin
Gefunden:=True;
break
end;
If Gefunden then
begin
sl2.Delete(Counter);
Listbox1.Clear;
if sl1.Count > 0 then
Listbox1.Items.AddStrings(sl1);
if sl2.Count > 0 then
Listbox1.Items.AddStrings(sl2);
end; // if Gefunden
end;
(alle Vorschläge wie immer ohne Gewähr auf völlige Richtigkeit)
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!