Exception abfangen?



  • dann taucht die exception wohl nicht in dem try-Block auf sondern an anderer Stelle.



  • Da funkt vielleicht der Debugger dazwischen.



  • pumuckl, das dacht ich erst auch, deshalb hatte ich auch ein return; hinter diesen Code gemacht, aber der Fehler kommt trotzdem!



  • MichelM schrieb:

    pumuckl, das dacht ich erst auch, deshalb hatte ich auch ein return; hinter diesen Code gemacht, aber der Fehler kommt trotzdem!

    Ein return fängt aber keine Exceptions die an anderer Stelle auftreten. Was für ein Framework benutzt du da überhaupt? Vielleicht kann dir in dem richtigen Forum besser geholfen werden.



  • wie kann der Fehler denn auftreten, wenn das return; die procedure beendet? so wird doch nachfolgender Code überhaupt nicht erreicht!

    Also wegen dem Framework habe ich keine Ahnung, wenns dir weiterhilft, ich habe den CodeGear C++ Builder 2009



  • MichelM schrieb:

    wie kann der Fehler denn auftreten, wenn das return; die procedure beendet?

    Indem er an einer Stelle auftritt, die vor dem return durchlaufen wird oder sogar parallel dazu. Viele GUI-Framewors verwenden parallele Threads um ihre Eingaben, events etc. zu verarbeiten.

    Google am besten mal nach "EDBEditError" - da findest du haufenweise Links zu genau diesem Thema.



  • Also vor dem return steht ja nur die Abrage des MaskEdits und eine Überprüfung dessen Inhalts. Durch das Googlen habe ich nur herausgefunden, dass der Fehler durch das MaskEdit ausgelöst wird, aber eine wirkliche Lösung konnte ich bis jetzt noch nicht finden. Ich gebe nochmal meinen genauen Code an:

    if( e->ClassNameIs("EDBEditError") ) 
      { 
        /*MaskError trapped ;o))*/ 
        ((TCustomEdit *)Sender)->Clear(); 
        ((TWinControl *)Sender)->Focused(); 
      } 
      else 
      { 
        /*All other Errors*/ 
        Application->ShowException(e); 
      }
    
    Boolean istime(AnsiString zeit){
    	// Uhrzeit nicht korrekt
    	if ((zeit.SubString(0,1) < '0') || (zeit.SubString(0,1) > '2') ||
    		(zeit.SubString(1,1) < '0') || (zeit.SubString(1,1) > '9')){
    		return false;
    	}
    	else if ((zeit.SubString(1,1)== '2') && (zeit.SubString(2,1) > '3')){
    			return false;
    		}
    		else if (zeit.SubString(4,1) > '5'){
    				return false;
    			}
    			else if ((zeit.SubString(4,1) == "") || (zeit.SubString(5,1) == "")) {
    					return false;
    					}
    	// Ansonsten gültige Uhrzeit
    	return true;
    }
    


  • MichelM schrieb:

    Also vor dem return steht ja nur die Abrage des MaskEdits [...] dass der Fehler durch das MaskEdit ausgelöst wird,

    Merkste was? In deinem try-Block seh ich die Abfrage des MaskEdits nicht...

    Kann natürlich auch sein dass du dem MaskEdit eine Fehlerbehandlungsroutine mitgeben kannst, z.B. eine etwas aussagekräftigere Fehlermeldung oder sonstetwas. Solang wir allerdings immernoch nicht wissen, welches GUI Framework das ist, kann man das nciht genau sagen.



  • Erste Gelegenheit für Exception bei $76F6B09E. Exception-Klasse EDBEditError mit Meldung 'Ungültiger Eingabewert. Mit der Taste ESC machen Sie die Änderungen rückgängig'. Prozess Projekt.exe (6108)

    Na, wem fällt was auf?
    Kleiner Tipp, die Fehlermeldung die zeigt, dass die Ausnahme nicht gefangen wird heißt "Unbehandelte Ausnahme" (Unhandled exception)

    http://blogs.msdn.com/davidklinems/archive/2005/07/12/438061.aspx



  • Kleiner Troll schrieb:

    Na, wem fällt was auf?

    Mir! 🙂

    Registrierter Troll schrieb:

    Da funkt vielleicht der Debugger dazwischen.



  • irgendwie raff ich das net ...



  • MichelM schrieb:

    irgendwie raff ich das net ...

    die ausgabe bedeutet nichts weiter, als:
    es ist ne exception geworfen worden und dein programm hat sie irgendwo aufgefangen - wirst du also mal bissl im callstack gucken müssen, wo sie geworfen und gefangen wurde, wenn du es noch immer nicht gefunden hast...

    bb


Anmelden zum Antworten