none
Error Handler geht nicht RRS feed

  • Frage

  • Hi

    Ich wollte jetzt den letzten Feinschliff an meiner Software machen, und wollte einen Error Handler einbauen :

    Dim iss As IO.StreamReader
                iss = New IO.StreamReader(Dir(Application.StartupPath + "\editor" + DateTime.Now.ToShortDateString + fileending))
                editor_text.Rtf = iss.ReadToEnd
                iss.Close()
                On Error GoTo About.vb

    Allerdings funktioniert das ganze nicht.

    Zur Information:

    Wenn die Datei gerade angelegt wird, kann das Programm nicht auf sie zugreifen ( IOException)

    About.vb soll dargestellt werden, das Form sich schließen.

    Und das funktioniert irgendwie nicht^^

    Ich hoffe, ihr könnt mir da helfen :)

    MFG

    Sven


    Mit freundlichen Grüßen Sven

    Sonntag, 2. Dezember 2012 12:41

Antworten

  • Hallo, auch wenn mir On Error nicht bekannt ist, glaube ich zu wissen, warum es nicht geht. VB.NET Code muss compiliert werden, zur Laufzeit ist also nicht mehr bekannt, wie die Dateien heißen, die du zur Entwicklung aufbaust. Also bringt weiß die CLR nichts mit About.vb anzufangen. Also nehme ich an, das du erst eine Instanz deiner From o.ä. instanzieren musst um Sie danach mittels Show(Dialog) anzuzeigen.

    Soweit ich das jetzt sehen kann, stammt On Error noch aus der Zeit von  VB. In .NET sind aber Try-Catch-Blöcke gebräuchlicher um Fehler abzufangen. Siehe dazu:
    http://msdn.microsoft.com/de-de/library/ms973849.aspx


    Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/

    Sonntag, 2. Dezember 2012 13:20
    Moderator
  • Hallo,

    On Error ist eine Altlast aus Visual Basic Classic, die man meiden sollte. Funktionieren würde sie ohnehin nur, wenn Du das On Error vor die übrigen Anweisungen setzt.

    Wie Koopakiller schon schreibt, solltest Du Try Catch einsetzen.
    Für oben könnte das wie folgt aussehen:

            Try
                Dim pfad As String = Path.Combine(Application.StartupPath, "editor" + DateTime.Now.ToShortDateString + fileending)
                If File.Exists(pfad) Then
                    editor_text.Rtf = File.ReadAllText(pfad)
                End If
            Catch ex As IOException
                MessageBox.Show("Die Datei ist im Zugriff" & ex.Message)
            End Try
    

    Anstatt des StreamReaders werden dort bereits vorgefertigte Routinen verwendet.
    Ausserdem prüft der Code ob die Datei überhaupt vorhanden ist.

    Gruß Elmar

    Sonntag, 2. Dezember 2012 14:02
    Beantworter

Alle Antworten

  • Hallo, auch wenn mir On Error nicht bekannt ist, glaube ich zu wissen, warum es nicht geht. VB.NET Code muss compiliert werden, zur Laufzeit ist also nicht mehr bekannt, wie die Dateien heißen, die du zur Entwicklung aufbaust. Also bringt weiß die CLR nichts mit About.vb anzufangen. Also nehme ich an, das du erst eine Instanz deiner From o.ä. instanzieren musst um Sie danach mittels Show(Dialog) anzuzeigen.

    Soweit ich das jetzt sehen kann, stammt On Error noch aus der Zeit von  VB. In .NET sind aber Try-Catch-Blöcke gebräuchlicher um Fehler abzufangen. Siehe dazu:
    http://msdn.microsoft.com/de-de/library/ms973849.aspx


    Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/

    Sonntag, 2. Dezember 2012 13:20
    Moderator
  • Ah okay. Ich schaus mir gleich mal an :)

    Mit freundlichen Grüßen Sven

    • Als Antwort markiert Scriptos Sonntag, 2. Dezember 2012 13:52
    • Tag als Antwort aufgehoben Scriptos Sonntag, 2. Dezember 2012 19:30
    Sonntag, 2. Dezember 2012 13:23
  • Hallo,

    On Error ist eine Altlast aus Visual Basic Classic, die man meiden sollte. Funktionieren würde sie ohnehin nur, wenn Du das On Error vor die übrigen Anweisungen setzt.

    Wie Koopakiller schon schreibt, solltest Du Try Catch einsetzen.
    Für oben könnte das wie folgt aussehen:

            Try
                Dim pfad As String = Path.Combine(Application.StartupPath, "editor" + DateTime.Now.ToShortDateString + fileending)
                If File.Exists(pfad) Then
                    editor_text.Rtf = File.ReadAllText(pfad)
                End If
            Catch ex As IOException
                MessageBox.Show("Die Datei ist im Zugriff" & ex.Message)
            End Try
    

    Anstatt des StreamReaders werden dort bereits vorgefertigte Routinen verwendet.
    Ausserdem prüft der Code ob die Datei überhaupt vorhanden ist.

    Gruß Elmar

    Sonntag, 2. Dezember 2012 14:02
    Beantworter
  • Ah okay. Ich hatte es zwar mithilfe des StreamReaders gelöst, aber deine Version ist natürlich schmaler :)

    Danke für die Hilfe.

    Ähm, ich habe jetzt noch nen ganz anderes Problem : Die MessageBox plopt 255 mal auf, obwohl sie nur einmal auftreten soll. WIe kann ich den Befehl dann abbrechen?
    • Bearbeitet Scriptos Sonntag, 2. Dezember 2012 14:20
    Sonntag, 2. Dezember 2012 14:10
  • Hallo,

    für sich genommen wird der Code nicht mehrmalig ausgeführt?

    An welcher Stelle hast Du den Code denn eingebaut?

    Oder ist noch ein On Error verblieben, damit kann man so was auch leicht "verbocken" ;).

    Gruß Elmar


    P.S.: Als Antwort solltest Du markieren, was hilfreich war -
    was hier Koopakillers Antwort gewesen wäre.
    Sonntag, 2. Dezember 2012 15:37
    Beantworter
  • naja, der Code wird in einem Timerevent ausgeführt.

    Aber es hat funktioniert, ich hatte einfach ausversehen den Code inerhalb einer Do-Loop Anwendung gehabt ^^

    PS: Eigentlich sollte Koopakillers Antwort makiert worden sein, naja, ich habs einfach nochmal gemacht :)

    Sonntag, 2. Dezember 2012 19:32