Gambas: Fehlerbehandlung
Aus Wikibooks
Zurück zu Gambas
Inhaltsverzeichnis |
[Bearbeiten] Fehler abfangen mit Catch
Der Befehl CATCH markiert den Beginn einer Fehlerroutine innerhalb einer Funktion oder einer Procedure.
Der Catch Teil wird immer dann ausgeführt, wenn ein Fehler bei der Ausführung der Funktion auftritt.
Der Fehler kann innerhalb der Prozedur selber auftreten oder aber in einer anderen Funktion, die aus der Prozedur heraus aufgerufen wurde. Dies gilt allerdings nur unter der Voraussetzung, dass die aufgerufene Funktion selber keinen CATCH Befehl enthält.
Je tiefer der Catch Teil zu finden ist , desto größere Priorität hat er.
Wenn ein Fehler im Catch Teil selber auftaucht, dann wird er nicht korrigiert. Der Catch Teil schützt sich also nicht selber.
Falls eine Finally Teil in der Funktion auftaucht, muss er dem Catch Teil vorausgehen.
Siehe FINALLY .
[Bearbeiten] Beispiel 1
Das Programm speichert der Inhalt der Textarea als Datei. Die Fehlerroutine fängt den Abbrechen Befehl im Dateiauswahldialog ab.
Sie brauchen eine Textarea und einen Befehslbutton auf Ihrer Form, um das Programm in Gang zu bringen.
[Bearbeiten] Der Code:
PUBLIC SUB Form_Open() Textarea1.Text = "Dies ist ein Test" END PUBLIC SUB Button1_Click() Dialog.SaveFile() File.Save(Dialog.Path, TextArea1.Text) CATCH IF Error THEN RETURN END
Siehe auch Gambas:_Dateien#Datei_speichern
[Bearbeiten] Beispiel 2
Sie haben ein Programm geschrieben, welches die Kreisfläche aus dem Radius berechnen soll. Sie wollen verhindern, dass in die Textbox mit der Radiuseingabe etwas anderes als eine Zahl eingegeben wird. Dazu ergänzen Sie Ihren Code durch eine Fehlerroutine mit CATCH.
CATCH
message.Info("Bitte eine Zahl eingeben")
END
Das komplette Programm schaut so aus:
Sie brauchen:
- 2 Textboxen
- 1 Befehlsbutton
- 1 Labelfeld
umd das Programm in Gang zu bringen.
[Bearbeiten] Der Code
PUBLIC SUB Form_Open()
Textbox1.Text = ""
Textbox2.Text = ""
Button1.Text = "Kreisberechnung mit dem Radius:"
Label1.Text = "Fläche:"
Label1.Alignment = 66
END
PUBLIC SUB Button1_Click()
r AS Float
F AS Float
IF Textbox1.Text = "" THEN
r = 0
Textbox1.Text = Str(0)
ELSE
r = Val(textbox1.text)
ENDIF
F = Pi*r^2
Textbox2.Text = Str(Round(F,-2))
CATCH
message.Info("Bitte eine Zahl eingeben")
END
Probieren Sie ganz bewußt eine Fehleingabe aus. Geben Sie im Feld für den Radius einen Buchstaben ein. Was passiert dann ? Jetzt versuchen Sie dasselbe noch einmal und schalten die Fehlerroutine CATCH nach Markierung mit der rechten Maustaste und Block auskommentieren ab.
[Bearbeiten] Beispiel 3
Das folgende Beispiel zeigt einen etwas komplizierten Code aus der Gambashilfe.
Beispiel:
' Print a file to the screen SUB PrintFile(FileName AS STRING) DIM hFile AS File DIM sLig AS STRING OPEN FileName FOR READ AS #hFile WHILE NOT EOF(hFile) LINE INPUT #hFile, sLig PRINT sLig WEND FINALLY ' Always executed, even if a error raised CLOSE #hFile CATCH ' Executed only if there is an error PRINT "Cannot print file "; FileName END


