Unbehandelte Ausnahme, Fehlermeldung ersetzen?

  • VB.NET

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

    Unbehandelte Ausnahme, Fehlermeldung ersetzen?

    Hallo!

    Wenn man ein Programm mit VB veröffentlicht und etwas stimmt nicht, z.B man versucht einen leeren String-Array auszulesen, kommt beim Start des Programmes ein Fehler, eben diese "Unbehandelte Ausnahme".

    Könnte man diese Fehlermeldung nicht irgendwie entfernen? Stattdessen z.B einfach eine MsgBox öffnen, aber das Programm trotzdem starten lassen? Sodass nicht gleich das ganze Programm abstürzt.

    Als Beispiel:

    VB.NET-Quellcode

    1. If string = Nothing Then MsgBox("Fehler! Der String ist leer!") ...




    Vielen Dank!

    VB.NET-Quellcode

    1. If string = "" Then
    2. MsgBox("Fehler! Der String ist leer!")
    3. End if
    4. oder
    5. If string = "" Then
    6. MsgBox("Fehler! Der String ist leer!")
    7. Else
    8. MsgBox("OK !")
    9. End if
    10. oder
    11. If Not string = "" Then
    12. MsgBox("OK !")
    13. Else
    14. MsgBox("Fehler! Der String ist leer!")
    15. End if


    ^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TVX“ ()

    PRiiME schrieb:

    VB.NET-Quellcode

    1. If string = Nothing Then
    @TVX: Macht es so, wie sich Bill Gates das gedacht hat:

    VB.NET-Quellcode

    1. Dim txt As String = ""
    2. If String.IsNullOrEmpty(txt) Then
    3. MsgBox("Fehler! Der String ist leer!")
    4. End If
    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!
    Danke erstmal für die Antworten. Den Code kannte ich vorher, "..." da ich ihn für unwichtig hielt.
    Nur bringt mir der Code nichts, auch wenn ich ihn im Source stehen habe, crasht das Programm beim leeren string mit einer unbehandelten Ausnahme, anstatt die MsgBox auszugeben.

    PRiiME schrieb:

    crasht das Programm beim leeren string mit einer unbehandelten Ausnahme
    Poste bitte noch mal genau diese Code-Zeile.
    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!

    VB.NET-Quellcode

    1. Dim ZeilenWert As Integer = rnd.Next(0, 31)
    2. Dim nummern As String = web.DownloadString("http://.../..../...*.txt")
    3. Dim Zeile() As String = nummern.Split(CChar(vbNewLine))
    4. Dim nummer = Zeile(ZeilenWert)



    Wenn die *.txt datei Leer ist, crasht es da sich der Index außerhalb des Arraybereiches befindet. Ich hätte aber lieber eine MsgBox.
    Danke

    VB.NET-Quellcode

    1. Dim nummer = 0
    2. If zeile.Length > 0 Then
    3. nummer = Zeile(ZeilenWert)
    4. End If
    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!

    VB.NET-Quellcode

    1. Dim nummern As String = web.DownloadString("http://.../..../...*.txt")
    2. If String.IsNullOrEmpty(nummern) Then
    3. MessageBox.Show("Die heruntergeladene Datei war leer!")
    4. Else
    5. Dim ZeilenWert As Integer = rnd.Next(0, 31)
    6. Dim Zeile() As String = nummern.Split(CChar(vbNewLine))
    7. Dim nummer = Zeile(ZeilenWert)
    8. End If
    Unter Public class deklariere ich den ZeilenWert weil es ein Random ist und es sich ändern würde, alles andere rufe ich mit deinem Code in jedem Sub immer wieder auf wenn ich auf "nummer" zugreifen will.

    Reicht es nicht "nummer" einmal zu Deklarieren?

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Management
    3. Imports System.Text.RegularExpressions
    4. Imports System.Security.Principal
    5. Imports System.IO
    6. Imports System.Net
    7. Public Class Form1
    8. Dim nummer As integer = 0
    9. End Class


    z.B.

    EDIT: diese ganzen Imports benötigst du natürlich nicht, es ist nur um zu verdeutlichen, WO Dim xxxx hingehört
    Nochmal EDIT: 1. Hoffe habe verstanden was Du willst und 2.
    für die Anfangsfrage würde ich

    VB.NET-Quellcode

    1. Try
    2. ' Versuch das und das
    3. Catch ex as Exception
    4. msgbox(ex.Message) ' Dann die Fehrermeldun, mit der Du was anfangen kannst, oder in die MSGBox irgendwas reinschreiben, was du möchtest, eventuell mit einem exit Sub um den Sub abzubrechen
    5. End Try


    Also IMMER wo in dem Programm etwas schief gehen kann z.B. Zugriffe, auf die Du keinen Einfluss hast oder so in Try Catch Blöcke

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

    Danke für die Hilfe, klappt alles soweit. Aber ich hab ein neues Problem. Vorher hat alles funktioniert, jetzt nichtmehr.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim ZeilenWert As Integer = rnd.Next(0, 31)
    3. Dim nummern As String = web.DownloadString("http://......./...../.....*.TXT")
    4. Dim Zeile() As String = nummern.Split(CChar(vbNewLine))
    5. Dim nummer = Zeile(ZeilenWert)
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. WebBrowser2.Navigate("http://www......de")
    8. Do While WebBrowser2.ReadyState <> WebBrowserReadyState.Complete
    9. Application.DoEvents()
    10. Loop
    11. WebBrowser2.Document.GetElementById("ID").InnerText = nummer
    12. End Sub
    13. End Class



    Zwar würde das Programm so auch abstürzen falls die Datei leer ist etc, aber das soll jetzt mal nebensächlich sein, immerhin funktionierte es so vorher.

    VB.NET-Quellcode

    1. WebBrowser2.Document.GetElementById("ID").InnerText = nummer


    Trägt mir einfach nichts mehr ein... mit ".InnerText = "Test"" wird es eingetragen, deklariere ich vorher einen String wird es auch eingetragen.
    "nummer" ist auch in Ordnung, wenn ich mir vorher mit "MsgBox(nummer)" den Wert ausgeben lasse, zeigt er auch den richtigen an.


    Wenn ich unter Public Class Form1..

    VB.NET-Quellcode

    1. Dim nummer As String = "Test-Text"


    Eingebe, funktioniert es auch... Ich versteh es wirklich nicht, wieso wird mir "nummer" nicht mehr in die Browser Textbox eingetragen?
    Doch!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim rnd As Random
    3. Dim nummer As String
    4. Private Sub Form1_Load(sender AS Object, e As EventArgs) Handles MyBase.Load
    5. rnd = New Random
    6. Dim nummern As String = web.DownloadString("http://......./...../.....*.TXT")
    7. If String.IsNullorEmpty(nummern) Then
    8. MessageBox.Show("Die Datei war leer!")
    9. Else
    10. Dim ZeilenWert As Integer = rnd.Next(0, 31)
    11. Dim Zeile() As String = nummern.Split(CChar(vbNewLine))
    12. nummer = Zeile(ZeilenWert)
    13. End If
    14. End Sub
    15. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    16. WebBrowser2.Navigate("http://www......de")
    17. Do While WebBrowser2.ReadyState <> WebBrowserReadyState.Complete
    18. Application.DoEvents()
    19. Loop
    20. WebBrowser2.Document.GetElementById("ID").InnerText = nummer
    21. End Sub
    22. End Class
    Dann müsste ich den Code aus Form1_Load auch in Private Sub Button1_Click eintragen! Sonst (Dim nummer As String) ist nummer leer!
    Würde ich nach deinem Code auf Button1 Klicken, würde er mir in das feld "ID" nichts eintragen, da in nummer nichts gespeichert ist!