Programm Stürzt ab obwohl fehler Code in Try Anweisung



  • Hallo,
    ich mal wieder ^^...
    Hab mich nun zum ersten mal an Exception handling mit Try und Catch ran getraut.
    Ich will testen ob in einem EditFeld auch eine zahl drin steht und nicht irgend ein sonstiger m*st.
    Dazu habe ich ein Beispiel aus der BCB hilfe übernommen und leicht verändert.
    Leider führt das bei mir nicht zum gewünschten ergebnis... das Programm stürzt mit dem EConvertError "ist kein gültiger Gleitkommawert" ab, obwohl die Umwandlung des Textfelds in Float in einem Try Block steht. Ergibt für mich keinen Sinn...

    bool ungeing=false;
     try
     {
      StrToFloat(Edit2->Text);
      StrToFloat(Edit3->Text);
     }
     catch(...)
     {
      Application->MessageBox("Ungültige Eingaben!","Fehler!",MB_OK);
      ungeing=true;
     }/*
     if(StrToFloat(Edit2->Text)<=0 && !ungeing)
     {
      ausrufe(220,28);
      ungeing=true;
      Application->MessageBox("Die Anteile müssen größer als 0 sein!","Fehler!",MB_OK);*/
     }
    

    Um zu verdeutlichen, dass der Fehler definitiv im Try block verursacht wird, habe ich den Rest mal ausgeklammert.
    Danke schonmal im Voraus
    Blace



  • Wenn du dein Programm von der IDE aus aufrufst, wird es bei einer Exception angehalten, auch wenn sie abgefangen wird. Mit F9 geht es dann weiter.
    Wenn du dein Programm "normal" startest, wird das nicht passieren.



  • ah ok danke 🙂
    hatte es immer nur aus dem builder heraus getestet und nicht die exe.



  • Verwende lieber StrToFloatDef dann kommt keine Exception bzw. kannst einen Default Wert angeben



  • Man kann auch

    bool __fastcall TryStrToFloat(const AnsiString S, double &Value)
    

    verwenden. Hier wird einfach false zurück gegeben wenn die Umwandlung fehlschlägt. AFAIK wird sie auch innerhalb von StrToFloat verwendet.



  • kk thx,
    gute tipps.. merk ich mir für die zukunft!
    in meinem programm lass ichs aber mit try catch weil ich die in dem schulprojekt einfach mal drin haben will. hatten das noch nicht gemacht und für neue dinge die wir verwenden obwohl wir noch nichts damit gemacht haben gibts auch teilpunkte.


Anmelden zum Antworten