On Error GoTo

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    On Error GoTo

    Hallo zusammen,

    da ich als Neuling ständig Fehler mache, dachte ich mir, ich könnte mich mal mit der On Error GoTo ... Anweisung beschäftigen. :) - bekomm es aber ehrlich gesagt nicht hin. Hier mal mein Code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. On Error GoTo Form_Load_ErrorHandler
    3. Process.Start("C:\test.txt") 'Falls diese Datei nicht existiert, dann sollte folgende Fehlermeldung erscheinen
    4. Form_Load_ErrorHandler:
    5. Select Case MsgBox("Nix gefunden!", vbExclamation, "Fehlermeldung")
    6. End Select
    7. Exit_Form_Load:
    8. End Sub


    Also die Fehlermeldung kommt - dummerweise immer! :cursing:

    Was mach ich falsch?

    Beste Grüße

    Sterat
    Vergiss diese On Error Goto Anweisung so schnell wieder, wie sie Dir eingefallen ist. Das ist uralt-Schrott und hat in .NET nichts mehr zu suchen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Du müsstest in Zeile 6 mit Goto zum Ende springen. GOTO ist eine Anweisung, die wirklich veraltet ist.

    Alternative wäre, du überprüfst, ob die Datei existiert. Somit kommt es nicht mehr zum Fehler zur Ausnahme (Exception). Ausnahmen sind in deinem Beispiel nicht so vorgesehen.

    VB.NET-Quellcode

    1. If IO.File.Exists("deineDatei") Then
    2. 'Schrei vor Glück ;)
    3. End If


    Die Alternative zum On error goto... Zeugs ist Try..Catch
    Einfach vorher abfragen, ob die Datei existiert.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. If IO.File.Exists("c:\test.txt") Then
    4. Process.Start("c:\test.txt")
    5. Else
    6. MessageBox.Show("Datei nicht gefunden!")
    7. End If
    8. End Sub
    9. End Class


    Alternativ gibt es Try-Catch-Blöcke. Aber diese sind mit Vorsicht zu genießen. Du nimmst Dir damit viele Möglichkeiten, Fehler überhaupt erst zu sehen. Try-Catch ist in vielen Fällen vermeidbar. Such mal hier im Forum nach "Avoid-Try-Catch" (hab den Link jetzt grad nicht parat). Vor allem, wenn Du Anfänger bist, solltest Du diese Konstrukte vermeiden. Sie können aber auch sinnvoll zur Programmsteuerung beitragen, aber dafür ist eben etwas Erfahrung von Nöten.

    In Deinem konkreten Fall ist die Lösung, einfach vorher abzufragen, ob die Datei existiert.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    1. Verwende in Vb.Net bitte Try Catch anstatt on Error Goto
    On Error Goto stammt sozusagen noch aus VB6 Zeiten, genauso wie MsgBox(). Besser ist MessageBox.Show()

    2. Dein Problem lässt sich mit einer simplen if-Abfrage lösen:

    VB.NET-Quellcode

    1. Dim app As String = "C:\test.txt"
    2. If System.IO.File.Exists(app) Then
    3. Process.Start(app)
    4. Else
    5. MessageBox.Show("Nix gefunden!", "Fehlermeldung", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    6. End If
    Ich geb noch meinen Senf dazu :P
    Also:
    On Error GoTo bzw alles was mit GoTo zu tun hat, hat wenn überhaupt nur was in VBA was zu suchen, und selbst da
    gibt es öffters möglichkeiten, die Fehler abzufangen.

    Wenn du Fehler abfangen möchtes, versuch es mit einer IF Bedingung (optional)
    und NUR wenn es wirklich nicht mehr geht, greifst du auf TryCatch zurück.
    Les dir dazu am besten den Beitrag von ErfinderDesRades durch.

    Wenn du fragen oder Probleme dazu hast, scheu sie nicht zu fragen ^^
    Irgendeiner wird sicherlich die Zeit finden, dir zu helfen


    Gruß, Annoxoli
    Hallo zusammen,

    TryCatch - eher vermeiden. Trotzdem ist meine Neugierde geweckt. :) Wie setze ich TryCatch ein? Unteres Beispiel funktioniert jedenfalls nicht.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Try
    3. Process.Start("C:\test.txt")
    4. Catch ex As FileNotFoundException
    5. MessageBox.Show(ex.Message)
    6. End Try
    7. End Sub

    Try
    Process.Start("C:\test.txt")
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    End Try


    Dann kommt bei mir folgende Fehlermeldung:

    Fehler 1 "Catch" kann den Typ "Microsoft.Office.Interop.Outlook.Exception" nicht auffangen, da er weder System.Exception ist noch eine Klasse, die von System.Exception erbt.
    Lass das Try-Catch weg. Du brauchst es hier absolut nicht, da Du die Möglichkeit hast, vorher zu fragen, ob die Datei da ist.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hi
    mach' System.Exception draus oder schränke es besser noch ein. Die "echte" Exception wird im Namensraum System aufbewahrt.
    Try-Catch ist bei Dateien sinnvoll, da sich zwischen Abfrage und Öffnen bereits der Status ändern kann, wenn die Wahrscheinlichkeit auch relativ gering ist. Allerdings sollte man einen möglichst präzisen Exception-Typen wählen (also eine Klasse, die von Exception erbt, wie IOException, FileNotFoundException, UnauthorizedAccessException, usw.).

    Gruß
    ~blaze~

    sterat schrieb:

    Wie setze ich TryCatch ein? Unteres Beispiel funktioniert jedenfalls nicht.
    natürlich funktioniert das.

    Nur: die Frage sollte sein: Wie setze ich TryCatch richtig ein?
    Und da war TryCatch ist ein heißes Eisen wohl malwieder ins Klo geschwätzt, wenn daraus nicht deutlich geworden ist, dass der richtige Einsatz von TryCatch 3 Dinge benötigt:
    1. ein Problem
    2. eine Lösung
    3. keine bessere Lösung als den TryCatch
    Mit Problem ist eine CodeZeile gemeint, von der bekannt ist, dass und welche Fehler auftreten können
    Mit Lösung ist gemeint, dass du eine Lösung dafür hast, wie das Programm weiterlaufen kann, wenn solch Fehler auftritt.

    Ohne Problem ist TryCatch sinnlos, ohne Lösung ist TryCatch gefährlich.

    Nun sag mir, in welcher Zeile ein Problem besteht, und welcher Fehler da fliegen kann.

    Und dann sag mir, was passieren soll, wenn das auftritt.

    VB.NET-Quellcode

    1. MessageBox.Show(ex.Message)
    Soll das eine Lösung sein? (mach dich nicht lächerlich ;))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hallo ErfinderDesRades,

    keinesfalls war Dein Beitrag Klogeschwätz und ich habe mich damit tatsächlich auseinandergesetzt. Leider bin ich eher pragmatisch gestrickt und muss einfach alles - und wenn der Grund auch noch so banal ist - ausprobieren. Halt wie ein kleines Kind, dass erst alles in den Mund steckt um es zu verstehen. :D

    Beste Grüße

    Sterat
    Dassis sehr ok. :thumbsup:
    Nur, dass du die Sachen auch wieder raustust aussm Mund, weil der übliche VBP-User hat da echtn Problem mit.

    Mach mal die Probe aufs Exempel: Gib "Catch" in die Forensuche ein, finde die Codebeispiele, und untersuche, ob sie die drei Bedingungen erfüllen, nämlich dass ein Problem besteht, dasses eine Lösung gibt, und keine bessere als den TryCatch.

    Ich schätze, in ca. 90% der Beispiele fehlt eine verantwortbare Lösung, und da hat wohl wieder son VBP-Baby sein Spielzeug nicht aussm Mund getan ;)