vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Problem mit FolderBrowserDialog.RootFolder - VB 2008 Express 
Autor: thuemmy
Datum: 09.10.08 08:50

Hallo Forum,

nachdem ich einige Sachen in VB 5 programmiert habe, versuche ich mich seit neuestem mit VB 2008 Express. Ich versuche mit gerade an einem Programm, in dem man unter anderem ein Verzeichnis auswählen kann. Den FolderBrowserDialog zu instanzieren ist ja kein Problem. Nun möchte ich der Eigenschaft RootFolder einen Wert zuweisen. Testweise erstmal "C:\". Später soll dann der Wert aus einer INI-Datei oder aus der Registry ausgelesen werden.

Mein bisheriger Versuch:
        Dim fbd As New FolderBrowserDialog
        fbd.RootFolder = "C:\"
        fbd.ShowNewFolderButton = False
        fbd.Description = "Wählen Sie ein Verzeichnis aus"
        If fbd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            lblVerzeichnis.Text = fbd.SelectedPath
        End If
Leider klappt das nicht so, wie ich es mir vorgestellt habe. Was mache ich da nur falsch?

Vielen Dank schonmal im Vorraus
Gruß thuemmy
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit FolderBrowserDialog.RootFolder - VB 2008 Express 
Autor: ProXy
Datum: 09.10.08 08:58

Hallo thuemmy,

die Property RootFolder erwartet eine Wert vom Datentyp Environment.SpecialFolder, nicht einen String. Für "C:\" gibt es allerdings kein SpecialFolder. Die Eigenschaft RootFolder dient eigentlich nur dazu, einen User über ein bestimmtes Verzeichnis nicht hinauszulassen. Wenn du nur möchtest, dass beim Öffnen des Dialoges ein bestimmtes Verzeichnis angezeigt wird, so kannst du dies auch via SelectedPath setzen!

Gruss,
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit FolderBrowserDialog.RootFolder - VB 2008 Express 
Autor: thuemmy
Datum: 09.10.08 09:25

Hallo Stefan,

vielen Dank für die schnelle Antwort. Wie nicht anders zu erwarten, hat das super funktioniert.

Gruß thuemmy
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit FolderBrowserDialog.RootFolder - VB 2008 Express 
Autor: Tommi467
Datum: 20.09.13 13:47

Hallo zusammen,

ich weiß, das ist ein steinalter Thread. Da ich selbst jetzt dieses Problem hatte
und mich aber nicht damit abfinden wollte alle Ordner runter scrollen zu müssen,
habe ich jetzt eine andere Lösung gefunden um MEINEN EIGENEN Rootordner zu definieren.

Hilfesmittel: Die Registry

In dem unten stehenden Source wird als erstes das gültige Verzeichnis für
Windows-Templates ausgelesen und in einen String geschrieben.
Anschließend wird der Eintrag mit dem von mir gewünschtem Pfad ersetzt.

Jetzt kann ich den Rootfolder auf Enviroment.SpecialFolder.Templates setzen
und die FolderBrowserDialogbox anzeigen. Jetzt erscheint nur noch der
gewünschte Pfad und alles andere ist ausgeblendet.

Nach der Auswahl des Pfads wird der Registry-Schlüssel für Templates wieder
auf den ursprünglichen Wert zurück gesetzt.

Einziges Problem:
Wenn während der Anzeige des FolderBrowserDialogs das Programm abschmiert,
Stromausfall auftritt oder der Benutzer schlicht die Anwendung wechselt, ist
ein falscher Wert für die Templates in der Registry.
Vielleicht hat da noch jemand eine Idee/Lösung

Da es im ganzen Netz keine brauchbaren Hinweise gibt, habe ich diese Antwort
erstellt um vielleicht einmal jemanden zu helfen, der so wie ich lange sucht...

Imports Microsoft.Win32
 
Private Sub MusterVorlagenToolStripMenuItem_Click(sender As System.Object, e As _
  System.EventArgs) Handles MusterVorlagenToolStripMenuItem.Click
 
        Dim MusterPfad As String = ""
 
        Dim str As String = "Wählen Sie einen Muster-Ordner," & vbCrLf
        FolderBrowserDialog1.Description = str
        FolderBrowserDialog1.ShowNewFolderButton = False
 
        Dim MeinKey As RegistryKey
        Dim TemplatesPath As String
 
        ' Einen Registryzweig zum lesen öffnen 
        MeinKey = Registry.CurrentUser.OpenSubKey( _
          "Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell" & _
          "Folders")
        ' Diverse Testschlüssel auslesen 
        TemplatesPath = MeinKey.GetValue("Templates", "")
        ' Den Registryzweig schließen 
        MeinKey.Close()
 
 
        ' Einen Registryzweig zum Schreiben öffnen 
        MeinKey = Registry.CurrentUser.OpenSubKey( _
          "Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell" & _
          "Folders", True)
        ' Diverse Testschlüssel anlegen 
        MeinKey.SetValue("Templates", Muster_Path)
        ' Die angelegten Testschlüssel wieder löschen 
        'MeinKey.DeleteValue("Stringschlüssel")
        ' Den Registryzweig schließen 
        MeinKey.Close()
 
 
        FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.Templates
        FolderBrowserDialog1.SelectedPath = Muster_Path
        FolderBrowserDialog1.ShowDialog()
        MusterPfad = FolderBrowserDialog1.SelectedPath
 
        ' Einen Registryzweig zum Schreiben öffnen 
        MeinKey = Registry.CurrentUser.OpenSubKey( _
           "Software\Microsoft\Windows\" _
           & "CurrentVersion\Explorer\User Shell Folders", True)
        ' Diverse Testschlüssel anlegen 
        MeinKey.SetValue("Templates", TemplatesPath)
        ' Die angelegten Testschlüssel wieder löschen 
        'MeinKey.DeleteValue("Stringschlüssel")
        ' Den Registryzweig schließen 
        MeinKey.Close()
 
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit FolderBrowserDialog.RootFolder - VB 2008 Express 
Autor: Manfred X
Datum: 21.09.13 05:00



Alarmstufe Rot .....

Nicht nachmachen!

[u]Falls möglich, stets den geeigneten Windows-Environment-Specialfolder nutzen.

Falls das in einem Einzelfall einmal nicht möglich bzw. sinnvoll sein sollte,
ist hier eine Routine, die als Parameter die Vorgabe eines beliebigen
Rootfolders ermöglicht:

    Public Function SelectFolder(rootFolder As [String], title As [String], _
                         ByRef selectedPath As [String]) As Boolean
 
        Dim shellType As System.Type = Type.GetTypeFromProgID( _
          "Shell.Application")
        Dim shell As Object = Activator.CreateInstance(shellType)
 
        Dim result As Object = shellType.InvokeMember("BrowseForFolder", _
            System.Reflection.BindingFlags.InvokeMethod, _
            Nothing, shell, New Object() {0, title, 0, rootFolder})
 
        If result Is Nothing Then
            selectedPath = ""
            Return False
        Else
            Dim sb As New System.Text.StringBuilder()
 
            While result IsNot Nothing
                Dim folderName As String = result.[GetType]().InvokeMember _
                        ("Title", System.Reflection.BindingFlags.GetProperty, _
                         Nothing, result, Nothing).ToString()
 
                sb.Insert(0, [String].Format("{0}\", folderName))
 
                result = result.[GetType]().InvokeMember _
                    ("ParentFolder", _
                    System.Reflection.BindingFlags.GetProperty, _
                     Nothing, result, Nothing)
            End While
 
            selectedPath = sb.ToString()
 
            selectedPath = System.Text.RegularExpressions.Regex.Replace _
                (selectedPath, "Desktop\\Computer\\.*\(\w:\)\\", _
                rootFolder.Substring(0, 3))
            Return True
        End If
    End Function
Anwendungsbeispiel:

   Dim selectedpath As String = ""
 
   If SelectFolder("C:\Daten", "Dialogtitel", selectedpath) Then
      MsgBox("Gewählter Pfad: " & selectedpath)
   Else
      MsgBox("Abbruch")
   End If
Verwendete Quelle:
http://stackoverflow.com/questions/705409/how-do-i-open-a-folderbrowserdialog-at-the-selected-folder



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel