Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aus ListBox löschen... (https://www.delphipraxis.net/5690-aus-listbox-loeschen.html)

hircusmutzus 15. Jun 2003 20:30


Aus ListBox löschen...
 
Hi,
ich habe ein kleines Problem: Ich habe einen Chat programmiert. Jetzt will ich noch in einer ListBox die Namen der Chatteilnehmer anzeigen, d.h. wenn sich ein Client connected sendet er seinen Nick und der wird dann der ListBox hinzugefügt. Logischer Weise will ich wenn der Clinent Disconnected, dass sein Name aus der ListBox gelöscht wird. Kann mir jemand sagen wie ich das anstelle?

MfG Matthias Volland

Christian Seehase 15. Jun 2003 20:31

Moin Matthias,

TListBox.Items.Delete(...)

hircusmutzus 15. Jun 2003 20:36

Das habe ich auch schon probiert, aber das problem ist das ich da die nummer des Namens in der ListBox finden muss, weil dieser Befehl ja eine Zahl benötigt!

MfG Matthias Volland

Daniel B 15. Jun 2003 20:43

Hallo,

dann schau Dir noch (Item)Index an.

Grüsse, Daniel :hi:

hircusmutzus 15. Jun 2003 20:49

hä, das versteh ich jetzt irgendwie nicht! :roll:
ich hab mal in der code library geguckt und da ist ein beitrag von dir drin, wie man eine listbox durchsichen kann und hab versucht das in meinen quelltext einzubauen, aber das hat nicht funktioniert!
ich schreib hier grad mal den code, vielleicht weist du ja was falsch ist.
Also der Client schickt beim disconnecten folgenden code:

Delphi-Quellcode:
procedure TForm1.ClientSocket2Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ClientSocket2.Socket.SendText(Edit1.Text); //Edit1 beinhaltet den Nickname
end;
und der Server macht dann folgendes

Delphi-Quellcode:
procedure TForm1.ServerSocket2ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var nick: string;
    i: integer;
begin
  nick:=Socket.ReceiveText;
  for i:=0 to ListBox2.Items.Count -1 do
  begin
    if ListBox2.Items.Strings[i] = nick then
      ListBox2.Items.Delete(i);
  end;
end;
MfG Matthias Volland

Christian Seehase 15. Jun 2003 20:49

Moin Daniel,

fast.

TListBox.Items.IndexOf(...)

hircusmutzus 15. Jun 2003 20:55

Sorry, vielleicht bin ich ja etwas dumm :oops: , aber ich raffs immer noch nicht! es wäre sau nett wenn du die ganze zeile mal schreiben könntest wo do meinst dass sie falsch ist! :roll:
Noch mal Danke!

MfG Matthias Volland

Christian Seehase 15. Jun 2003 22:14

Moin Matthias,

statt

Delphi-Quellcode:
procedure TForm1.ServerSocket2ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var nick: string;
    i: integer;
begin
  nick:=Socket.ReceiveText;
  for i:=0 to ListBox2.Items.Count -1 do
  begin
    if ListBox2.Items.Strings[i] = nick then
      ListBox2.Items.Delete(i);
  end;
end;
geht's auch so:

Delphi-Quellcode:
procedure TForm1.ServerSocket2ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i: integer;

begin
  i := ListBox2.Items.IndexOf(Socket.ReceiveText);
  if i <> -1 then ListBox2.Items.Delete(i);
end;
Abgesehen davon, dass Deine Version auch funktionieren müsste.

Übrigens kannst Du statt
Delphi-Quellcode:
ListBox2.Items.Strings[i]
auch
Delphi-Quellcode:
ListBox2.Items[i]
schreiben.

[EDIT]
Falsch ist Deiner Abfrage eigentlich nichts, nur dass die Schreibweise exakt übereinstimmen muss, bei IndexOf wird Gross-/Kleinschreibung nicht unterschieden.
[/EDIT]

hircusmutzus 16. Jun 2003 12:30

Hi, danke für die schnelle Hilfe! :)

MfG Matthias Volland


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 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