Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Fehlermeldung "List Index Out Of Bounds (1)"? (https://www.delphipraxis.net/7129-fehlermeldung-list-index-out-bounds-1-a.html)

hircusmutzus 3. Aug 2003 11:17


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:
procedure TForm1.ServerSocket2ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ListBox1.Items.Add(Socket.RemoteHost + ' (' + Socket.RemoteAddress + ')');
end;
Sobald ein Client die Verbindung trennt, soll er natürlich wieder gelöscht werden...

Delphi-Quellcode:
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;
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)"!
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

sakura 3. Aug 2003 11:20

Re: Fehlermeldung "List Index Out Of Bounds (1)"?
 
Du musst Deine for-Schleife rückwärts durchlaufen ;-)

Code:
[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;
...:cat:...

Christian Seehase 3. Aug 2003 11:22

Re: Fehlermeldung "List Index Out Of Bounds (1)"?
 
Moin Matthias,

lass' die Schleife mal rückwärts laufen, also

Delphi-Quellcode:
for iFor := ListBox1.Items.Count -1 downto 0 do
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.

hircusmutzus 3. Aug 2003 11:27

Re: Fehlermeldung "List Index Out Of Bounds (1)"?
 
Hi,
danke das klappt wunderbar!!!

MfG Matthias Volland

mr2 3. Aug 2003 15:30

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:
try
  DB.Connected := True;
except
  // falls Fehler bei Verbindung mit der DB
  {raise;}
end;
-> sollte nur in seltenen Ausnahmefällen verwendet werden, sonst immer mit raise die Exception weiterreichen

oder:
Delphi-Quellcode:
  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;
-> dann werden programmweit alle nicht mittels try except end abgefangenen Exceptions ebenfalls geschluckt

->> 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

sakura 3. Aug 2003 15:33

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:...

Pseudemys Nelsoni 3. Aug 2003 16:09

Re: Fehlermeldung "List Index Out Of Bounds (1)"?
 
mit dem thema zwar nicht, aber die frage (siehe ersten Post) wurde gestellt

sakura 3. Aug 2003 16:18

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 04:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz