Probleme beim Löschen von einträgen in einer Listbox
-
ähm ja war nur kommentier da ich auch noch dabei bin den clienten weiter aufzubauen und da brauch ich nen server der nicht abschmiert.
Um das ganze etwas zu verdeutlichen.
in lbUser steht meinetwegen:
User1
User2
User3
so nun beendet User1 die verbindung und muss somit aus lbUser verschwinden um den Nick wieder freizugeben.
Aber sobald ich den User lösche bekomme ich nen stack überlauf.
Habe auch schon gegoogelt und diverse Foren durchsucht nur leider nicht wirklich brauchbares gefunden.int tPos = uMSG.Length(); AnsiString tNick = uMSG.SubString(2,tPos); /* Löschen des Nicks wenn der Client die Verbindung schließt */ if(lbUser->ItemIndex >= 0) // Unbedingt abfragen !!! { int testi; testi=lbUser->Items->IndexOf("User1"); // "User1" später ersetzen durch // tNick lbUser->Items->Delete(testi); }Ahso der fehler tritt immer auf sobald er User1 löschen soll also bei lbUser->Items->Delete(testi);
-
-
hab ich getan schonmal danke im voraus für deine hilfe
-
Also soweitso gut hab nun das problem: sobald man disconnectet wird user hinzugefügt und nicht gelöscht:
z.b.:
Server
User1
User1 // wird nachdem disconnect hinzugefügt obwohl der gelöscht werden sollteAnzUser = idServer->Socket->ActiveConnections; if ( AnzUser >= 1) { for ( int Lauf = 1;Lauf <= AnzUser; Lauf++) { AnsiString uMSG = idServer->Socket->Connections[(Lauf-1)]->ReceiveText(); AnsiString tTest = uMSG.SubString(1,1); if (tTest == 0) { int tPos = uMSG.Length(); AnsiString tNick = uMSG.SubString(2,tPos); /* Löschen des Nicks wenn der Client die Verbindung schließt */ if(lbUser->ItemIndex >= 0) // Unbedingt abfragen !!! { int testi; testi=lbUser->Items->IndexOf("User1"); lbUser->Items->Delete(testi); } } else if (tTest == 1 || tTest ==2) { int t1Pos = uMSG.Length(); AnsiString u1MSG = uMSG.SubString(2,t1Pos); reChat->Lines->Add(u1MSG); } } }Und sollte nach dem disconnect eigentlich so aussehn:
ServerDen kompletten SourceCode könnt ihr HIER →http://web32.w3profiler.com/files/CServerSourceCode.zip runterladen
Hat jemand nen rat?
-
Der Sourcecode des Server nützt nichts, wenn man nicht den Client zum testen hat. Wie soll also die Routine angesprungen werden?
-
arg mein fehler hier der link zum SourceCode vom Clienten.
http://web32.w3profiler.com/files/CClientSourceCode.rarNoch ne kleine Info der Server läuft auf Port 40000 Unter Optionen kann man den Port einstellen aber die buttons ok cancel funktioniern noch nicht und man muss um ein usernamen in der server listbox zu adden noch kurz vorher nen text abschicken mt dem clienten ach und nichts vom server aus senden funtzt noch nicht.
-
void __fastcall TfrmMain::idServerClientConnect(TObject *Sender, TCustomWinSocket *Socket) { AnzUser = idServer->Socket->ActiveConnections; int UserID = lbUser->Items->Count; for (int Lauf = 1; Lauf <= UserID; Lauf++) { for (int Lauf1 = 1; Lauf1 <= AnzUser; Lauf1++) { idServer->Socket->Connections[Lauf1-1]->SendText("0" +lbUser->Items->Strings[Lauf-1]); } } }Du nimmst doch auch keinen User in die Liste auf, wenn er sich connectet
-
DochDoch das Passiert erst sobald der User ne Nachricht an den Server schickt ich weis is im mom nicht gut gelöstist kommt später aber so das wenn der client sich verbindet direkt den nick wegschickt und der server denn dann addet
hast du skype oder teamspeak glaube is einfacher das darüber zu machen oder icq?
-
Bei mir wird nie ein User in der Listbox gezeigt, auch wenn ich einen String esandt habe, der wohl angezeigt wird
skype oder teamspeak glaube is einfacher das darüber zu machen oder icq
habe ich alles nicht
-
Schau in meiner Mail nach
-
jo besten dank das läuft jetzt endlich danke für die schnelle hilfe