Man kann noch so sorgsam programmieren, doch irgendwann erwischt es jeden. Das Programm macht
Fehler. Um die Fehler, ob gewollt oder nicht, zu vermeiden bietet VB.NET einige Konstrukte die
Fehler nicht zu vermeiden, aber aufzufangen und zu verarbeiten. Das hat den Vorteil, dass man zum
Einen Fehler abfangen und gleichzeitig das Programm weiterlaufen lassen kann.
Konstrukte wie man sie aus VB6 kannte (on error goto ) werden zwar noch von .NET unterstützt, das
heißt aber nicht, dass man sie auch verwenden sollte. Das Framework bietet eine viel bessere
Fehlerbehandlung als das simple goto.
Visual Basic: [code]
Try
'Code
Catch ex As Exception
MsgBox(ex.Message)
End Try
[/code]
So sieht dann ein Fehler-Konstrukt aus. Falls es einen Fehler in dem Code-Teil geben sollte, wird
der Fehler im Catch-Block aufgefangen und die ex (als Exception-Klasse) gibt mit ihrer
message-Eigenschaft die Fehlermeldung aus.
Hier mal ein kleines Beispiel
Visual Basic: [code]
Sub _catch_fehler()
Try
Dim i As Integer = 5
Dim x As Integer = 0
Dim y As Integer
y = i / x
Catch ex As Exception
msgbox(ex.message)
End Try
End Sub
[/code]
Wie jeder weiß darf man nicht durch 0 dividieren. Das erkennt hier der Compiler und wirft eine
Fehlermeldung, die dann von unserem Konstrukt aufgefangen wird.
Dieses Beispiel zeigt eine komplexere Fehlerbehandlung
Visual Basic: [code]
Sub _catch_complex_fehler()
Try
Dim pfad As String = "z:text.txt"
Dim text As String = System.IO.File.ReadAllText(pfad)
Catch ex As IO.DriveNotFoundException
Try
Dim pfad As String = "c:text.txt"
Dim text As String = System.IO.File.ReadAllText(pfad)
Catch e As IO.FileNotFoundException
MsgBox(ex.Message)
End Try
Catch
MsgBox("Ein unbekannter Fehler ist aufgetreten")
Finally
MsgBox("Aufräumarbeiten werden erledigt")
End Try
End Sub
[/code]
Wie man sieht werden hier zwei "Fehlersorten" abgefangen, einmal die allgemeinen Fehler (Exception) und dann noch eine spezielle Ausname, die DriveNotFoundException, d.h hier wurde das Laufwerk Z: nicht gefunden. Innerhalb des Catch-Blockes kann wiederum ein Try-Konstrukt mit Code stehen, hier wird jetzt versucht auf C: die Datei zu öffnen, da sie dort nicht vorhanden ist, wird ein FileNotFound Fehler ausgegeben und dieser auch aufgefangen. Bis dahin unbekannte Fehler können mit einem einfachen Catch aufgefangen werden. Zum Schluss kann man noch eine Finally Anweisung hinzufügen, d.h falls ein Fehler auftritt wird auf jeden Fall der Finally-Block ausgeführt. In diesem Block kann man noch "Aufräumarbeiten" erledigen und so zb offene Streams schliessen o.ä. _________________