![]() |
Fehlermeldung "List Index Out Of Bounds (1)"?
Hi,
ich hätte da mal eine kurze Frage: Bei meinem Chat werden alle aktiven User die mit dem Server verbunden sind in eine ListBox geschrieben:
Delphi-Quellcode:
Sobald ein Client die Verbindung trennt, soll er natürlich wieder gelöscht werden...
procedure TForm1.ServerSocket2ClientConnect(Sender: TObject;
Socket: TCustomWinSocket); begin ListBox1.Items.Add(Socket.RemoteHost + ' (' + Socket.RemoteAddress + ')'); end;
Delphi-Quellcode:
Aber immer wenn mehr als ein Client mit dem Server verbunden ist und dieser die Verbindung Trennt, gibt mir der Server die Fehlermeldung "List Index Out Of Bounds (1)"!
procedure TForm1.ServerSocket2ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket); var text: string; iFor: Integer; begin text:=Socket.RemoteHost + ' (' + Socket.RemoteAddress + ')'; for iFor := 0 to ListBox1.Items.Count -1 do begin if ListBox1.Items.Strings[iFor] = text then ListBox1.Items.Delete(iFor); end;[/B] end; Was habe ich denn falsch gemacht??? Gibt es eigentlich generell die Möglichkeit alle Fehlermeldungen eines Programms zu unterdrücken? Ich weis das ist natürlich nicht empfehlenswert, aber ich wüsste es gerne mal! MfG Matthias Volland |
Re: Fehlermeldung "List Index Out Of Bounds (1)"?
Du musst Deine for-Schleife rückwärts durchlaufen ;-)
Code:
...:cat:...
[color=#ff0000]for iFor := ListBox1.Items.Count -1 downto 0 do[/color]
begin if ListBox1.Items.Strings[iFor] = text then ListBox1.Items.Delete(iFor); end; |
Re: Fehlermeldung "List Index Out Of Bounds (1)"?
Moin Matthias,
lass' die Schleife mal rückwärts laufen, also
Delphi-Quellcode:
Sobald ein Eintrag gelöscht wurde, ist ListBox1.Items.Count in der For-Anweisung grösser als die tatsächliche Anzahl, da die Grenzen der For Schleife nur zu Beginn der Schleife ausgelesen werden.
for iFor := ListBox1.Items.Count -1 downto 0 do
|
Re: Fehlermeldung "List Index Out Of Bounds (1)"?
Hi,
danke das klappt wunderbar!!! MfG Matthias Volland |
Re: Fehlermeldung "List Index Out Of Bounds (1)"?
um alle Fehlermeldungen zu unterdrücken gibt es zwei Wege:
entweder kritische Anweisung mit try except end umschließen:
Delphi-Quellcode:
-> sollte nur in seltenen Ausnahmefällen verwendet werden, sonst immer mit raise die Exception weiterreichen
try
DB.Connected := True; except // falls Fehler bei Verbindung mit der DB {raise;} end; oder:
Delphi-Quellcode:
-> dann werden programmweit alle nicht mittels try except end abgefangenen Exceptions ebenfalls geschluckt
TForm1 = class(TForm)
... procedure FormCreate(Sender: TObject); private procedure HideExceptions(Sender: TObject; E: Exception); end; implementation procedure TForm1.FormCreate(Sender: TObject); begin Application.OnException := HideExceptions; end; procedure TForm1.HideExceptions(Sender: TObject; E: Exception); begin // hier Unterscheidung der Exceptions durchführen end; ->> sinnvollerweise sollte sowohl in try except end als auch in Application.OnException eine Unterscheidung der verschiedenen Exceptions vorgenommen werden und daraus eine sinnvolle Meldung für den User generiert werden |
Re: Fehlermeldung "List Index Out Of Bounds (1)"?
Darf ich mal fragen, was das mit obigen Problem zu tun hat? Das würde rein gar nicht helfen!
...:cat:... |
Re: Fehlermeldung "List Index Out Of Bounds (1)"?
mit dem thema zwar nicht, aber die frage (siehe ersten Post) wurde gestellt
|
Re: Fehlermeldung "List Index Out Of Bounds (1)"?
:oops: Damit will ich mich dann mal entschuldigen. Den Teil habe ich % überlesen. :roll: Sorry.
...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz