Gambas: Fehlerbehandlung

Aus Wikibooks

Wechseln zu: Navigation, Suche

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:

Bild:Gambaskreis.png

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
Persönliche Werkzeuge
Buch erstellen