Try & catch Funktion: Bei Fehler/Erfolg Msgbox anzeigen lassen?

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Try & catch Funktion: Bei Fehler/Erfolg Msgbox anzeigen lassen?

    Hallo,
    ich möchte von einem Ordner in den anderen Dateien Kopieren & einfügen:

    Try
    Dim fi As New IO.FileInfo("C:\Bilder\Bild1")
    fi.CopyTo("C:\Bilder2\Bild1", True)
    Catch
    End Try

    Wie kann ich bei einem Fehler (Wenn der Pfad z.B nicht gefunden wird) eine Msgbox anzeigen lassen?
    Die soll dann nur angezeigt werden, wenn auch wirklich ein Fehler auftritt.
    Wenn aber alles geklappt hat soll eine Msgbox angezeigt werden das es geklappt hat.

    Mfg,
    Malizero :)
    Okay, danke.
    Aber was ist wenn das so aussieht:
    Try
    Dim fi As New IO.FileInfo("C:\Bilder\Bild1")
    fi.CopyTo("C:\Bilder2\Bild1", True)
    Catch
    MsgBox.Show("Fehler")
    End Try
    Msgbox("Erfolg")


    Dann wird, wenn ein Fehler vorliegt, die Meldung "Fehler" & "Erfolg" erscheinen.
    Was kann ich machen damit, wenn ein Fehler vorliegt, NUR die Meldung "Fehler" kommt?


    Mfg,
    Mali

    VB.NET-Quellcode

    1. Try
    2. Dim fi As New IO.FileInfo("C:\Bilder\Bild1")
    3. fi.CopyTo("C:\Bilder2\Bild1", True)
    4. MessageBox.Show("Erfolg")
    5. Catch
    6. MessageBox.Show("Fehler")
    7. End Try
    Mit freundlichen Grüßen

    Linux

    VB.NET-Quellcode

    1. Dim oklean As Boolean = False


    Und dann im Event

    VB.NET-Quellcode

    1. Try
    2. Dim fi As New IO.FileInfo("C:\Bilder\Bild1")
    3. fi.CopyTo("C:\Bilder2\Bild1", True)
    4. oklean = True
    5. Catch
    6. MessageBox.Show("Fail")
    7. If oklean=True Then
    8. 'Das tun wenn Try erfolgreich ist
    9. End If

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

    Finally wird immer ausgeführt, egal ob eine Exception aufgetreten ist oder nicht!

    Beispiel (wl = WriteLine):

    VB.NET-Quellcode

    1. Sub abc()
    2. Try
    3. wl("try")
    4. Return ' / Throw Exception / GoToHell() / DestroyUniverse() / whatever
    5. Catch ex As Exception
    6. Finally
    7. wl("finally") 'wird trotzdem ausgeführt
    8. End Try
    9. End Sub

    --> Beide Ausgaben werden angezeigt.
    Gruß
    hal2000

    hal2000 schrieb:

    Finally wird immer ausgeführt, egal ob eine Exception aufgetreten ist oder nicht!


    Dann macht Finally aber für mich keinen Sinn:

    Da wäre ja

    VB.NET-Quellcode

    1. Try
    2. 'Code
    3. Catch ex As Exception
    4. MessageBox.Show(ex.message)
    5. Finally
    6. MessageBox.Show("Läuft")
    7. End Try
    gleich mit dem

    VB.NET-Quellcode

    1. Try
    2. 'Code
    3. Catch ex As Exception
    4. MessageBox.Show(ex.message)
    5. End Try
    6. MessageBox.Show("Läuft")

    ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    @ThePlexian: Nein. Denn egal was passiert, der Code im Finally-Block wird immer ausgeführt:

    VB.NET-Quellcode

    1. Sub Foo()
    2. Try
    3. Throw New Exception("Test")
    4. Finally
    5. MessageBox.Show("FinallyBlock")
    6. End Try

    Hier wird zuerst die MessageBox angezeigt und anschließend kommt die .Net-Fehlermeldung (vorausgesetzt, das Programm wird nicht in VisualStudio gestartet, sondern per Dpppelklick auf die Exe, denn sonst hält der Debugger an der Zeile)

    Das wird bei Using-Blöcken verwendet:

    VB.NET-Quellcode

    1. Using Bpm As New Bitmap("Pfad")
    2. Bpm.DoSomething()
    3. End Using
    4. 'entspricht
    5. Dim Bpm As New Bitmap("Pfad")
    6. Try
    7. Bpm.DoSomething()
    8. Finally
    9. If Not Bpm Is Nothing Then
    10. Bpm.Dispose()
    11. End If
    12. End Try

    Dadurch wird sichergestellt, dass Dispose immer aufgerufen wird. Das gilt auch bei einem Return im Try-Block:

    VB.NET-Quellcode

    1. Using Bpm As New Bitmap("")
    2. Bpm.Save("")
    3. Return "Bla"
    4. End Using

    wird zu dem hier kompiliert:

    Quellcode

    1. IL_0000: ldstr ""
    2. IL_0005: newobj instance void [System.Drawing]System.Drawing.Bitmap::.ctor(string)
    3. IL_000a: stloc.1
    4. .try
    5. {
    6. IL_000b: ldloc.1
    7. IL_000c: ldstr ""
    8. IL_0011: callvirt instance void [System.Drawing]System.Drawing.Image::Save(string)
    9. IL_0016: ldstr "Bla"
    10. IL_001b: stloc.0
    11. IL_001c: leave.s IL_0028
    12. } // end .try
    13. finally
    14. {
    15. IL_001e: ldloc.1
    16. IL_001f: brfalse.s IL_0027
    17. IL_0021: ldloc.1
    18. IL_0022: callvirt instance void [mscorlib]System.IDisposable::Dispose()
    19. IL_0027: endfinally
    20. } // end handler
    21. IL_0028: ldloc.0
    22. IL_0029: ret

    Hier wird zuerst der Rückgabewert in einer lokalen Variable abgelegt, dann wird der Try-Block verlassen und erst dann wird tatsächlich der ret-OpCode aufgerufen (nachdem der Inhalt der Variable auf den Stack geholt wurde).
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    ThePlexian schrieb:

    Dann macht Finally aber für mich keinen Sinn:
    Dann sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Dim path = "c:\Temp\Text.txt"
    2. Dim fi = New IO.FileInfo(path)
    3. If Not fi.Exists Then
    4. Return
    5. End If
    6. Dim attr = fi.Attributes
    7. Try
    8. WRITE_ANY_TO_THE_FILE(fi.FullName)
    9. Catch ex As Exception
    10. MessageBox.Show(ex.Message)
    11. Finally
    12. fi.Attributes = attr
    13. End Try
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Warum muss das bitte Try Catch sein?!
    Prüf doch im VORFELD ob der Pfad existiert und geb ne Meldung aus...
    Und wenn er nicht existiert lass das Kopieren an der Stelle ganz.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Was ist aber, wenn du es keine Zugriffsberechtigungen gibt?
    Was ist aber, wenn ein Speichermedium während des Kopiervorgangs entfernt wird?

    Es gibt zuviele Arten von Fehlern, die auftreten können, als alle Abfragen zu können.



    Mfg.
    SAR
    In einer Bibliothek sollte grundsätzlich eine Exception geworfen werden, da der Bibliothekschreiber nicht weiß, wie der User einen Un-Sachverhalt behandelt haben will.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!