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



  • Kann nichts falsches sehen.

    ggf. maile mir das Projekt mal zu

    cecke@marquardtnet.info



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

    AnzUser = 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:
    Server

    Den 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.rar

    Noch 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


Anmelden zum Antworten