Exception abfangen bzw. nicht anzeigen lassen



  • Hallo, man bekommt ja eine Exception beim TClientSocket, wenn eine Verbindung nicht zu stande kommt. Diese möchte ich gerne abfangen, damit nicht dieses "eklige" ErrorFenster aufgerufen wird.

    Wenn ich

    try{
      ClientSocket->Open();
    }
    catch(...)
    {
      ...
    }
    

    hinzuschreibe, wird das catch nicht aufgerufen, da die Fehlermeldung erst nach

    void __fastcall TForm1::sck_webmp3Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
      if(ErrorCode==10061)
      {
        Label5->Caption="Keine Verbindung";
      }
    
    }
    

    auftritt.

    Meine If Schleife wird noch zuvor durchlaufen, doch wie gesagt, kommt dann noch die Exception Meldung des Programms "hoch".

    Wie kann ich das nun verhindern?

    Gruß
    Thorsten



  • if-Schleife 😕

    Natürlich mußt du die Anweisung mit einem try/catch umgeben, in der die Exception auftreten kann/sollte/wird/...



  • Ich kann mich da dunkel an

    ErrorCode = 0;
    

    erinnern. Dazu gibt es auf jeden Fall Hilfe in der Hilfe. Und die Suche sollte auch noch etwas dazu finden.



  • HarHar für diesen Tread hätte mir mein Lehrer den Kopf abgerissen
    @
    ThorstenSteinberg

    If - Verzweigung 😉

    Aber keine sorge ist mir auch schon im eifer des Gefechts passiert 😉



  • ja, ich hatte ja das try um die Open() methode gemacht, jedoch ist der dann nie in die catch schleife gegangen. habe es nun folgender maßen gemacht:

    im Error Ereignis:

    if(ErrorCode==10061)
      {
        Label5->Caption="Keine Verbindung";
        ErrorCode=0;
      }
    

    Thx @PuppetMaster2k

    Gruß
    Thorsten



  • ThorstenSteinberg schrieb:

    catch schleife

    du hast KEINE schleifen in deinem codebeispiel!



  • Doch! Schau dir noch mal genau meinen ersten Beitrag an! Die try-catch wird in einem Button-Klick-Ereigniss ausgeführt, oder auch im FormLoad, ist ja egal...



  • try/catch ist keine Schleife, genausowenig wie z.B. if/else.
    Beispiele für Schleifenkonstrukte sind for oder while



  • na gut, dann sind es halt "Abfragen" 🙄 😉



  • Um wieder zurück zu deinem Problem mit den Errors zukommen, um die Errormeldungen abzufangen gibt es ja den OnError-Event des TClientSocket, falls du bezwecken willst, dass gar keine Fehlermeldung mehr auftritt hielft dies:

    void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
       ErrorCode = 0;
    }
    

    Obwohl ich es nicht gerade klug finde, die Errors einfach zu ignorieren.



  • Öhhm joa danke, nur ich habe es ja schon gelöst das Problem und auch nicht gesagt, dass ich die Fehlermeldungen ignorieren möchte... hier siehe zitat von weiter oben:

    ja, ich hatte ja das try um die Open() methode gemacht, jedoch ist der dann nie in die catch schleife gegangen. habe es nun folgender maßen gemacht:

    im Error Ereignis:

    if(ErrorCode==10061) 
      { 
        Label5->Caption="Keine Verbindung"; 
        ErrorCode=0; 
      }
    

    Thx @PuppetMaster2k

    Gruß
    Thorsten

    trotzdem danke ...



  • wedmer schrieb:

    Obwohl ich es nicht gerade klug finde, die Errors einfach zu ignorieren.

    Seinem Code-Schnipsel nach zu urteilen, tut er das ja auch nicht. Er will lediglich verhindern, das er eine Message bei Fehlern erhält.



  • GENAU! ich kann mit einer JA-NEIN-Message nichts anfangen, wenn niemand am rechner sitzt und irgendwas angefordert wurde, was es nicht gibt. dann wird es halt nochmal probiert.


Anmelden zum Antworten