FolderBrowserDialog - Probleme mit dem Vorgabepfad

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    FolderBrowserDialog - Probleme mit dem Vorgabepfad

    Moin !

    ich wollte ein Verzeichnis aussuchen und habe dafür folgendes codiert:

    VB.NET-Quellcode

    1. Private Sub bt_VerzeichnisWählen(sender As Object, e As EventArgs) Handles bt_setFolder.Click
    2. Dim TryReport As New EBL.Service.TryCatchReport
    3. Try
    4. With FolderBrowserDialog
    5. ' Ermöglicht es neue Verzeichnisse anzulegen
    6. .ShowNewFolderButton = True
    7. 'Kurzbeschreibung für den Dialog
    8. .Description = "_VerzeichnisAuswahlTitel"
    9. ' wenn eine Verzeichnisangabe vorhanden ist, dann prüfen ob verfügbar und als Default setzen
    10. If Me.txt_Ausgabedatei.Text.Length > 0 Then
    11. .RootFolder = CType(Me.txt_Ausgabedatei.Text, System.Environment.SpecialFolder)
    12. Else
    13. ' wenn der Vorgabepath nicht vorhanden ist, dann wird der Tmp-Ordner des Anwenders als Root gesetzt
    14. If My.Computer.FileSystem.DirectoryExists(_DateiBasisVerzeichnis) Then
    15. .RootFolder = CType(_DateiBasisVerzeichnis, System.Environment.SpecialFolder)
    16. Else
    17. .RootFolder = CType(IO.Path.GetTempPath, System.Environment.SpecialFolder)
    18. End If
    19. End If
    20. If .ShowDialog = Windows.Forms.DialogResult.OK Then
    21. Me.txt_Ausgabedatei.Text = .SelectedPath
    22. End If
    23. End With
    24. 'ToDo - Überwachungsfunktion für weitere Schaltflächen etc.
    25. 'CheckDateiName()
    26. Catch ex As Exception
    27. TryReport.Show("unerwarteter Fehler in EBL.Vermessung > Form > bt_VerzeichnisWählen", ex.ToString)
    28. End Try
    29. End Sub


    In der Zeile mit

    VB.NET-Quellcode

    1. .RootFolder = CType(_DateiBasisVerzeichnis, System.Environment.SpecialFolder)


    steigt das Programm mit der Meldung


    System.InvalidCastException: Ungültige Konvertierung von der Zeichenfolge c:\temp\trimble\ in Typ Integer. ---> System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
    --- Ende der internen Ausnahmestapelüberwachung ---
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
    bei EBL.Vermessung.frm_Vermessung_Export.bt_VerzeichnisWählen(Object sender, EventArgs e) in X:\VB_NET_2015\Projects\tappenbeckja\EBL.Vermessung\EBL.Vermessung\frm_Vermessung_Export.vb:Zeile 474.


    aus!

    Der Wert für _DateiBasisVerzeichnis ist dabei

    "c:\temp\trimble\"


    Nun habe ich mir das nochmal näher angesehen und dabei festgestellt, dass die Konvertierung versuchen würde in ein Integer umzuwandeln. Das verursacht den Fehler. Wenn ich aber nur

    VB.NET-Quellcode

    1. .RootFolder = _DateiBasisVerzeichnis


    schreibe wird angemerkt das eine

    Implizite Konvertierung von "String" in "System.Environment.SpecialFolder"


    vorgenommen werden muss. Das ist auch wieder nicht richtig!


    Kann mir einer weiterhelfen ?

    Gruß Jan

    jan99 schrieb:

    weiterhelfen
    Da hast Du die Property .RootFolder falsch verstanden.
    Die will tatsächlich ein Aufzählungsmember von Environment.SpecialFolder.
    Was Du meinst, ist .SelectedPath. Dies hat aber eine niedrigere Priorität als .RootFolder, so dass bei gesetztem .RootFolder der .SelectedPath igroriert wird.
    Teste dies:

    VB.NET-Quellcode

    1. Using dlg As New FolderBrowserDialog
    2. 'dlg.RootFolder = Environment.SpecialFolder.CommonMusic
    3. dlg.SelectedPath = "c:\temp"
    4. dlg.ShowDialog()
    5. End Using
    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!