Eigener FolderBrowserDialog - Root Folder ermitteln

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    Eigener FolderBrowserDialog - Root Folder ermitteln

    Hallo allerseits,

    bin gerade dabei mir einen eigenen FolderBrowserDialog zu basteln und müsste wissen, wie man das Root Folder (ich glaube so nennt man es) ermittelt.

    Also mit dem ich dann alle Laufwerke und die Bibliotheken anzeigen lassen kann.

    Wenn ich im Internet nach "Get root folder" suche, finde ich nix brauchbares, ich weiss nicht, wie ich das sonst nennen soll...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @kafffee Deine Frage ist nicht eindeutig.
    Meinst Du Application.StartupPath?
    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!
    Erstelle eine form und spiel mit dem snippet

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Label2.Text = IO.Path.GetPathRoot(Environment.SystemDirectory)
    5. Label3.Text = Application.StartupPath()
    6. Label5.Text = Directory.GetCurrentDirectory()
    7. End Sub
    8. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    9. Application.Exit()
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. For Each Dir As String In Directory.GetDirectories("c:\")
    13. ListBox1.Items.Add(Dir)
    14. Next
    15. For Each Dir As String In Directory.GetDirectories("e:\")
    16. ListBox1.Items.Add(Dir)
    17. Next
    18. For Each Dir As String In Directory.GetDirectories("f:\")
    19. ListBox1.Items.Add(Dir)
    20. Next
    21. End Sub
    22. End Class
    @minimalist dann müsste er die Festplatten schon kennen, für ein Programm ziemlich unsinnig.

    Und wie fast alle schon sagen, die Frage ist äußerst uneindeutig.
    Systemroot bei mir ist zum Beispiel C:\Windows (CD %SYSTEMROOT% in einer Konsole)
    Bei Linux / Unix wären alle eingehängten (gemounteten) Laufwerke irgendwo im Verzeichnisbaum der mit / (z.B. /home) beginnt.
    Unter Windows gibt es nicht den root, es gibt Laufwerke, Beispielsweise. Oder das Wurzelverzeichnis (root = Wurzel) einer Applikation, oder, oder.

    Pseudocode weil ungetestet um unter windows / VB die Harddrives aufzulisten:

    Quellcode

    1. Dim drives As String() = System.IO.Directory.GetLogicalDrives()
    2. For Each drive As String In drives
    3. System.Console.WriteLine(drive)
    4. Next
    Hi

    Wenn Du einen modernen Dialog, anstelle des veralteten FolderBrowserDialog, verwenden möchtest, kann ich dir nur den über das Interface IFileDialog empfehlen. Per IFileDialog::SetOptions <- FILEOPENDIALOGOPTIONS.FOS_PICKFOLDERS legst Du die entsprechende Eigenschaft fest, das Dir ein moderner PickFolderDialog angezeigt wird. Wenn Du keinen speziellen "Start"-Folder festlegst, ist der Default = "Dieser PC". Ansonsten kann auch jeder andere (Shell)-Folder verwendet werden.
    Mfg -Franky-
    Wow danke für die vielen Antworten :) Da muss ich mich erstmal durchwühlen...

    Um mal Licht ins Dunkel zu bringen:

    Ich möchte alle Laufwerke, auch USB-Sticks und Netzlaufwerke anzeigen. In die Bibliotheken komm ich ja dann über beispielweise "C:\Users\Documents" rein denke ich.

    Und was mir noch eingefallen ist: Eigentlich wollte ich dann über System.IO.Directory.GetDirectories weiter navigieren, aber das gibt mir ja die kompletten Pfadnamen dann. Ich bräuchte aber nur die tatsächlichen Ordnernamen...
    @-Franky-: :D Deine Interface-Vorschläge führen bestimmt zu super Ergebnissen. Ich spreche jetzt erstmal nur für mich selbst, aber ich glaube, dass ich nicht der einzige bin, der sich dabei denkt: häh? Watwiewowerwassollmanmachen? Ich glaub, ein Tutorial mit ein paar Beispielen wär ganz hilfreich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    kafffee schrieb:

    Ich bräuchte aber nur die tatsächlichen Ordnernamen...
    So was:

    VB.NET-Quellcode

    1. Dim di = New DirectoryInfo(Application.StartupPath)
    2. Label1.Text = di.ToString()
    3. Label2.Text = di.Name

    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!
    Ist dir mal aufgefallen, dass in einem Programm englische Bezeichnungen stehen, zum Beispiel Environment.SpecialFolder.MyDocuments, im Explorer / FileDialog die deutschen Bezeichnungen stehen (müssen)?



    Ich bräuchte aber nur die tatsächlichen Ordnernamen...
    Da kannst du mit Split arbeiten.

    VB.NET-Quellcode

    1. Dim test As String = "C:\Users\Bartosz\Pictures"
    2. Dim StringArray As String() = test.Split({"\"c})
    3. Debug.WriteLine(StringArray.Last())


    @Bartosz Beschäftige dich mal mit dem IO Namespace. Diese ganze String wurschtelei ist absolut unnötig.

    VB.NET-Quellcode

    1. Dim di As New DirectoryInfo("C:\Users\Bartosz\Pictures")
    2. Debug.Print(di.Name)


    docs.microsoft.com/de-de/dotne…yinfo?view=net-6.0#fields

    docs.microsoft.com/de-de/dotne…oryinfo.name?view=net-6.0
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @VaporiZed Ich bin nicht so der Tutorial-Schreiber. Am Ende bleiben da mehr Fragen offen als beantwortet werden. Ich bin da eher der praktisch veranlagte. Einfach machen und ausprobieren. Ein paar Sachen, im Zusammenhang mit Interfaces, hab ich hier ja schon gezeigt.
    Mfg -Franky-
    @kafffee und @VaporiZed Auch wenn die Frage beantwortet ist, würde ich dennoch den Code für den modernen PickFolder-Dialog hier lassen. Vllt kann der eine oder andere dieses ja gebrauchen. Hab mal auf die schnelle ein einfaches Bsp. (ohne IFileDialogEvents und IFileDialogCustomize) zusammen gezimmert (Wer Fehler findet darf diese gern verbessern ;) ). Daher gibt es auch keine bzw. nur minimale Kommentierung des Codes und nur die verwendeten Interface-Funktionen sind vollständig. Denke das ganze erklärt sich von selbst bzw. kann man sich ja ergooglen.

    Eine Klasse "PickFolderDialog"
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Runtime.InteropServices
    4. Public Class PickFolderDialog
    5. Implements IDisposable
    6. #Region "Const"
    7. ' siehe Headerfile Winerror.h
    8. Private Const S_OK As Integer = 0
    9. ' siehe Headerfile shobjidl_core.h
    10. Private Const IID_IModalWindow As String = "b4db1657-70d7-485e-8e3e-6fcb5a5c1802"
    11. Private Const IID_IFileDialog As String = "42f85136-db7e-439c-85f1-e4075d135fc8"
    12. Private Const IID_IShellItem As String = "43826d1e-e718-42ee-bc55-a1e261c37bfe"
    13. Private Const CLSID_FileOpenDialog As String = "dc1c5a9c-e88a-4dde-a5a1-60f82a20aef7"
    14. #End Region
    15. #Region "Enum"
    16. ' siehe Headerfile shobjidl_core.h
    17. Private Enum FILEOPENDIALOGOPTIONS As Integer
    18. FOS_OVERWRITEPROMPT = &H2
    19. FOS_STRICTFILETYPES = &H4
    20. FOS_NOCHANGEDIR = &H8
    21. FOS_PICKFOLDERS = &H20
    22. FOS_FORCEFILESYSTEM = &H40
    23. FOS_ALLNONSTORAGEITEMS = &H80
    24. FOS_NOVALIDATE = &H100
    25. FOS_ALLOWMULTISELECT = &H200
    26. FOS_PATHMUSTEXIST = &H800
    27. FOS_FILEMUSTEXIST = &H1000
    28. FOS_CREATEPROMPT = &H2000
    29. FOS_SHAREAWARE = &H4000
    30. FOS_NOREADONLYRETURN = &H8000
    31. FOS_NOTESTFILECREATE = &H10000
    32. FOS_HIDEMRUPLACES = &H20000
    33. FOS_HIDEPINNEDPLACES = &H40000
    34. FOS_NODEREFERENCELINKS = &H100000
    35. FOS_OKBUTTONNEEDSINTERACTION = &H200000
    36. FOS_DONTADDTORECENT = &H2000000
    37. FOS_FORCESHOWHIDDEN = &H10000000
    38. FOS_DEFAULTNOMINIMODE = &H20000000
    39. FOS_FORCEPREVIEWPANEON = &H40000000
    40. FOS_SUPPORTSTREAMABLEITEMS = &H80000000
    41. End Enum
    42. ' siehe Headerfile shobjidl_core.h
    43. Public Enum SIGDN As Integer
    44. SIGDN_NORMALDISPLAY = &H0
    45. SIGDN_PARENTRELATIVEPARSING = &H80018001
    46. SIGDN_DESKTOPABSOLUTEPARSING = &H80028000
    47. SIGDN_PARENTRELATIVEEDITING = &H80031001
    48. SIGDN_DESKTOPABSOLUTEEDITING = &H8004C000
    49. SIGDN_FILESYSPATH = &H80058000
    50. SIGDN_URL = &H80068000
    51. SIGDN_PARENTRELATIVEFORADDRESSBAR = &H8007C001
    52. SIGDN_PARENTRELATIVE = &H80080001
    53. SIGDN_PARENTRELATIVEFORUI = &H80094001
    54. End Enum
    55. #End Region
    56. #Region "Variablen"
    57. Private m_DisposedValue As Boolean
    58. Private m_FileOpenDialog As Object
    59. #End Region
    60. #Region "API"
    61. ' siehe https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-shcreateitemfromparsingname
    62. ' oder Headerfile shobjidl_core.h
    63. <DllImport("Shell32.dll", EntryPoint:="SHCreateItemFromParsingName")>
    64. <PreserveSig> Private Shared Function SHCreateItemFromParsingName(<[In], MarshalAs(UnmanagedType.LPWStr)> pszPath As String,
    65. <[In]> pbc As IntPtr,
    66. <[In], MarshalAs(UnmanagedType.LPStruct)> riid As Guid,
    67. <Out> ByRef pUnk As IntPtr) As Integer
    68. End Function
    69. #End Region
    70. #Region "New"
    71. Public Sub New()
    72. Dim eFILEOPENDIALOGOPTIONS As FILEOPENDIALOGOPTIONS
    73. m_FileOpenDialog = Activator.CreateInstance(Type.GetTypeFromCLSID(New Guid(CLSID_FileOpenDialog)))
    74. If m_FileOpenDialog IsNot Nothing Then
    75. If CType(m_FileOpenDialog, IFileDialog).GetOptions(eFILEOPENDIALOGOPTIONS) = S_OK Then
    76. eFILEOPENDIALOGOPTIONS = eFILEOPENDIALOGOPTIONS Or FILEOPENDIALOGOPTIONS.FOS_PICKFOLDERS
    77. CType(m_FileOpenDialog, IFileDialog).SetOptions(eFILEOPENDIALOGOPTIONS)
    78. End If
    79. End If
    80. End Sub
    81. #End Region
    82. #Region "Public Functions"
    83. Public Function SetFolder(Optional strFolder As String = Nothing) As Boolean
    84. Dim bolRet As Boolean = False
    85. If m_FileOpenDialog IsNot Nothing Then
    86. Dim pIShellItem As IntPtr
    87. If strFolder Is Nothing Then strFolder = Convert.ToChar(0)
    88. If SHCreateItemFromParsingName(strFolder, IntPtr.Zero,
    89. New Guid(IID_IShellItem),
    90. pIShellItem) = S_OK Then
    91. If CType(m_FileOpenDialog, IFileDialog).SetFolder(pIShellItem) = S_OK Then
    92. bolRet = True
    93. End If
    94. Marshal.Release(pIShellItem)
    95. End If
    96. End If
    97. Return bolRet
    98. End Function
    99. Public Function Show(Optional hwndOwner As IntPtr = Nothing) As Boolean
    100. Dim bolRet As Boolean = False
    101. If m_FileOpenDialog IsNot Nothing Then
    102. If CType(m_FileOpenDialog, IFileDialog).Show(hwndOwner) = S_OK Then
    103. bolRet = True
    104. End If
    105. End If
    106. Return bolRet
    107. End Function
    108. Public Function GetResult(Optional eSIGDN As SIGDN = SIGDN.SIGDN_FILESYSPATH) As String
    109. Dim strRet As String = String.Empty
    110. If m_FileOpenDialog IsNot Nothing Then
    111. Dim ShellItem As IShellItem = Nothing
    112. If CType(m_FileOpenDialog, IFileDialog).GetResult(ShellItem) = S_OK Then
    113. Dim pszName As IntPtr
    114. If ShellItem.GetDisplayName(eSIGDN, pszName) = S_OK Then
    115. strRet = Marshal.PtrToStringUni(pszName)
    116. Marshal.FreeCoTaskMem(pszName)
    117. End If
    118. Marshal.ReleaseComObject(ShellItem)
    119. End If
    120. End If
    121. Return strRet
    122. End Function
    123. #End Region
    124. #Region "Interface IModalWindow"
    125. ' siehe Headerfile shobjidl_core.h
    126. <ComImport>
    127. <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)>
    128. <Guid(IID_IModalWindow)>
    129. Private Interface IModalWindow
    130. 'virtual /* [local] */ HRESULT STDMETHODCALLTYPE Show(
    131. ' /* [annotation][unique][in] */
    132. ' _In_opt_ HWND hwndOwner) = 0;
    133. <PreserveSig> Function Show(<[In]> hwndOwner As IntPtr) As Integer
    134. End Interface
    135. #End Region
    136. #Region "Interface IFileDialog"
    137. ' siehe Headerfile shobjidl_core.h
    138. <ComImport>
    139. <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)>
    140. <Guid(IID_IFileDialog)>
    141. Private Interface IFileDialog
    142. Inherits IModalWindow
    143. <PreserveSig> Shadows Function Show(<[In]> hwndOwner As IntPtr) As Integer
    144. 'virtual HRESULT STDMETHODCALLTYPE SetFileTypes(
    145. ' /* [in] */ UINT cFileTypes,
    146. ' /* [size_is][in] */ __RPC__in_ecount_full(cFileTypes) const COMDLG_FILTERSPEC *rgFilterSpec) = 0;
    147. <PreserveSig> Function SetFileTypes() As Integer
    148. 'virtual HRESULT STDMETHODCALLTYPE SetFileTypeIndex(
    149. ' /* [in] */ UINT iFileType) = 0;
    150. <PreserveSig> Function SetFileTypeIndex() As Integer
    151. 'virtual HRESULT STDMETHODCALLTYPE GetFileTypeIndex(
    152. ' /* [out] */ __RPC__out UINT *piFileType) = 0;
    153. <PreserveSig> Function GetFileTypeIndex() As Integer
    154. 'virtual HRESULT STDMETHODCALLTYPE Advise(
    155. ' /* [in] */ __RPC__in_opt IFileDialogEvents *pfde,
    156. ' /* [out] */ __RPC__out DWORD *pdwCookie) = 0;
    157. <PreserveSig> Function Advise() As Integer
    158. 'virtual HRESULT STDMETHODCALLTYPE Unadvise(
    159. ' /* [in] */ DWORD dwCookie) = 0;
    160. <PreserveSig> Function Unadvise() As Integer
    161. 'virtual HRESULT STDMETHODCALLTYPE SetOptions(
    162. ' /* [in] */ FILEOPENDIALOGOPTIONS fos) = 0;
    163. <PreserveSig> Function SetOptions(<[In]> fos As FILEOPENDIALOGOPTIONS) As Integer
    164. 'virtual HRESULT STDMETHODCALLTYPE GetOptions(
    165. ' /* [out] */ __RPC__out FILEOPENDIALOGOPTIONS *pfos) = 0;
    166. <PreserveSig> Function GetOptions(<Out> ByRef pfos As FILEOPENDIALOGOPTIONS) As Integer
    167. 'virtual HRESULT STDMETHODCALLTYPE SetDefaultFolder(
    168. ' /* [in] */ __RPC__in_opt IShellItem *psi) = 0;
    169. <PreserveSig> Function SetDefaultFolder() As Integer
    170. 'virtual HRESULT STDMETHODCALLTYPE SetFolder(
    171. ' /* [in] */ __RPC__in_opt IShellItem *psi) = 0;
    172. <PreserveSig> Function SetFolder(<[In]> psi As IntPtr) As Integer
    173. 'virtual HRESULT STDMETHODCALLTYPE GetFolder(
    174. ' /* [out] */ __RPC__deref_out_opt IShellItem **ppsi) = 0;
    175. <PreserveSig> Function GetFolder() As Integer
    176. 'virtual HRESULT STDMETHODCALLTYPE GetCurrentSelection(
    177. ' /* [out] */ __RPC__deref_out_opt IShellItem **ppsi) = 0;
    178. <PreserveSig> Function GetCurrentSelection() As Integer
    179. 'virtual HRESULT STDMETHODCALLTYPE SetFileName(
    180. ' /* [string][in] */ __RPC__in_string LPCWSTR pszName) = 0;
    181. <PreserveSig> Function SetFileName() As Integer
    182. 'virtual HRESULT STDMETHODCALLTYPE GetFileName(
    183. ' /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *pszName) = 0;
    184. <PreserveSig> Function GetFileName() As Integer
    185. 'virtual HRESULT STDMETHODCALLTYPE SetTitle(
    186. ' /* [string][in] */ __RPC__in_string LPCWSTR pszTitle) = 0;
    187. <PreserveSig> Function SetTitle() As Integer
    188. 'virtual HRESULT STDMETHODCALLTYPE SetOkButtonLabel(
    189. ' /* [string][in] */ __RPC__in_string LPCWSTR pszText) = 0;
    190. <PreserveSig> Function SetOkButtonLabel() As Integer
    191. 'virtual HRESULT STDMETHODCALLTYPE SetFileNameLabel(
    192. ' /* [string][in] */ __RPC__in_string LPCWSTR pszLabel) = 0;
    193. <PreserveSig> Function SetFileNameLabel() As Integer
    194. 'virtual HRESULT STDMETHODCALLTYPE GetResult(
    195. ' /* [out] */ __RPC__deref_out_opt IShellItem **ppsi) = 0;
    196. <PreserveSig> Function GetResult(<Out, MarshalAs(UnmanagedType.Interface)> ByRef ppsi As IShellItem) As Integer
    197. 'virtual HRESULT STDMETHODCALLTYPE AddPlace(
    198. ' /* [in] */ __RPC__in_opt IShellItem *psi,
    199. ' /* [in] */ FDAP fdap) = 0;
    200. <PreserveSig> Function AddPlace() As Integer
    201. 'virtual HRESULT STDMETHODCALLTYPE SetDefaultExtension(
    202. ' /* [string][in] */ __RPC__in_string LPCWSTR pszDefaultExtension) = 0;
    203. <PreserveSig> Function SetDefaultExtension() As Integer
    204. 'virtual HRESULT STDMETHODCALLTYPE Close(
    205. ' /* [in] */ HRESULT hr) = 0;
    206. <PreserveSig> Function Close() As Integer
    207. 'virtual HRESULT STDMETHODCALLTYPE SetClientGuid(
    208. ' /* [in] */ __RPC__in REFGUID guid) = 0;
    209. <PreserveSig> Function SetClientGuid() As Integer
    210. 'virtual HRESULT STDMETHODCALLTYPE ClearClientData( void) = 0;
    211. <PreserveSig> Function ClearClientData() As Integer
    212. 'virtual HRESULT STDMETHODCALLTYPE SetFilter(
    213. ' /* [in] */ __RPC__in_opt IShellItemFilter *pFilter) = 0;
    214. <PreserveSig> Function SetFilter() As Integer
    215. End Interface
    216. #End Region
    217. #Region "Interface IShellItem"
    218. ' siehe Headerfile shobjidl_core.h
    219. <ComImport>
    220. <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)>
    221. <Guid(IID_IShellItem)>
    222. Private Interface IShellItem
    223. 'virtual HRESULT STDMETHODCALLTYPE BindToHandler(
    224. ' /* [unique][in] */ __RPC__in_opt IBindCtx *pbc,
    225. ' /* [in] */ __RPC__in REFGUID bhid,
    226. ' /* [in] */ __RPC__in REFIID riid,
    227. ' /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
    228. <PreserveSig> Function BindToHandler() As Integer
    229. 'virtual HRESULT STDMETHODCALLTYPE GetParent(
    230. ' /* [out] */ __RPC__deref_out_opt IShellItem **ppsi) = 0;
    231. <PreserveSig> Function GetParent() As Integer
    232. 'virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
    233. ' /* [in] */ SIGDN sigdnName,
    234. ' /* [annotation][string][out] */
    235. ' _Outptr_result_nullonfailure_ LPWSTR *ppszName) = 0;
    236. <PreserveSig> Function GetDisplayName(<[In]> sigdnName As SIGDN,
    237. <Out> ByRef ppszName As IntPtr) As Integer
    238. 'virtual HRESULT STDMETHODCALLTYPE GetAttributes(
    239. ' /* [in] */ SFGAOF sfgaoMask,
    240. ' /* [out] */ __RPC__out SFGAOF *psfgaoAttribs) = 0;
    241. <PreserveSig> Function GetAttributes() As Integer
    242. 'virtual HRESULT STDMETHODCALLTYPE Compare(
    243. ' /* [in] */ __RPC__in_opt IShellItem *psi,
    244. ' /* [in] */ SICHINTF hint,
    245. ' /* [out] */ __RPC__out int *piOrder) = 0;
    246. <PreserveSig> Function Compare() As Integer
    247. End Interface
    248. #End Region
    249. #Region "IDisposable"
    250. Protected Overridable Sub Dispose(disposing As Boolean)
    251. If Not m_DisposedValue Then
    252. If disposing Then
    253. If m_FileOpenDialog IsNot Nothing Then
    254. If Marshal.ReleaseComObject(m_FileOpenDialog) = 0 Then
    255. m_FileOpenDialog = Nothing
    256. End If
    257. End If
    258. End If
    259. m_DisposedValue = True
    260. End If
    261. End Sub
    262. Public Sub Dispose() Implements IDisposable.Dispose
    263. Dispose(disposing:=True)
    264. GC.SuppressFinalize(Me)
    265. End Sub
    266. #End Region
    267. End Class


    und der Code in der Form

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Using Dialog As New PickFolderDialog
    4. ' Wird bei Dialog.SetFolder nichts angegeben = Dieser PC
    5. ' Ansonsten z.B. "C:" oder "C:\" = Laufwerk C:
    6. ' "C:\Users" oder "C:\Users\" = Ordner Users auf Laufwerk C:
    7. ' "::{645FF040-5081-101B-9F08-00AA002F954E}" = Papierkorb
    8. ' "::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}" = Netzwerk
    9. ' "::{031E4825-7B94-4DC3-B131-E946B44C8DD5}" = Bibliotheken
    10. ' usw.
    11. If Dialog.SetFolder Then
    12. If Dialog.Show Then
    13. Debug.Print(Dialog.GetResult(PickFolderDialog.SIGDN.SIGDN_FILESYSPATH))
    14. End If
    15. End If
    16. End Using
    17. End Sub
    18. End Class
    Mfg -Franky-