| |
VB.NET - Ein- und UmsteigerProblem 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 | |
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 | |
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 | |
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 | |
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
| |
| 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 |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|