The problem: On a windows form there is a FolderBrowserDialog added. There is a button to use the FolderBrowserDialog.
Wen you click the button the FolderBrowserDialog is used. All word fine. Until it is deployed, then the dialog screen comes up with no tree to browse or select a folder.
Why? How?
On msdn i found some hints likeFolderBrowserDialog Class and Problem using FolderBrowser control in Setup project. This last one “solve” the problem.
But there was one think more to understand, how to pass the value to the new thread and getting it back from the thread.
This is how i did it.
Private _Directory As String = String.Empty
Private Sub cmdBrowse_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs
) Handles cmdBrowse.Click
Dim thdThread As Threading.Thread = New Threading.Thread(
New Threading.ParameterizedThreadStart(AddressOf dlgFolder))
Dim StartPath As String = txtValue.Text
'Open the FolderBrowerDialog in a other (static) thread.
'This is done to prevent a empty (no tree) popup
thdThread.SetApartmentState(Threading.ApartmentState.STA)
thdThread.Start(StartPath)
thdThread.Join()
'Store result from other thread
txtValue.Text = _Directory
End Sub
'''
''' Use folderBrowserDialog
'''
'''
'''
''' Last update: EH 2012-02-11
''' To prevent problemens the advies to use STAThread is followed.
''' Do NOT use ByVal or ByRef, then you will get errors
'''
_
Public Sub dlgFolder(obj As Object)
Dim strDirectory As String = CType(obj, String)
Dim StartPath As String, strResult As String
With FolderBrowserDialog
' Use Desktop gives acces to the network
.RootFolder = Environment.SpecialFolder.Desktop
If strDirectory = "" Then
.SelectedPath = ""
Else
.SelectedPath = IO.Path.GetDirectoryName(strDirectory)
End If
StartPath = .SelectedPath
strResult = StartPath
If .ShowDialog = Windows.Forms.DialogResult.OK Then
'Store result
If StartPath <> .SelectedPath Then strResult = .SelectedPath
End If
If Not strResult.EndsWith(IO.Path.DirectorySeparatorChar) Then
'Add missing char
strResult &= IO.Path.DirectorySeparatorChar
End If
'Return the path to use
_Directory = strResult
End With
End Sub
HTH