ho modificato il codice da C# a VB, e il mio ENV è VS2015 + Office 2010. Il mio codice è leggermente diversa da quella di Daniel, come qualche funzione dal codice di Daniel supporta al solo Office 2003/2007
Utilizzando un nuova istanza di Excel, sarà più lenta dell'apertura di OpenFileDialog o OpenFolderDialog, ma è molto più user friendly. Il mio programma chiama questo codice solo una volta, quindi il trading delle prestazioni per la facilità d'uso non è un problema nel mio caso.
Imports Microsoft.Office
Imports Excel = Microsoft.Office.Interop.Excel
Private Sub Button_select_raw_dir_Click(sender As Object, e As EventArgs) Handles Button_select_raw_dir.Click
Dim raw_app As Excel.Application = New Excel.Application
Dim raw_data_open_folder_dialog As Microsoft.Office.Core.FileDialog
raw_data_open_folder_dialog = raw_app.FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFolderPicker)
raw_data_open_folder_dialog.AllowMultiSelect = False
raw_data_open_folder_dialog.Title = "Please select the raw data's dir "
Dim nres As Integer = raw_data_open_folder_dialog.Show()
Dim sz_SelectedPath As String = Nothing
If nres = -1 Then '-1 means open... lol
For Each selectedItems As Object In raw_data_open_folder_dialog.SelectedItems
sz_SelectedPath = selectedItems.ToString()
Next
TextBox_raw_data_dir.Text = sz_SelectedPath
End If
raw_app.Quit()
ReleaseComObject(raw_app)
GC.Collect()
GC.WaitForPendingFinalizers()
End Sub
' Release excel objects to avoid memory leak
Public Sub ReleaseComObject(ByRef obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
MsgBox("Exception! Failed to release com obj, debug your code.")
End Try
End Sub
Se volete una versione C#, credo sei abbastanza intelligente per crearlo in C# :)
Sede [questa domanda] (http://stackoverflow.com/questions/1250991/visual-studio-2008-folder-browser-dialog?rq=1). Fondamentalmente sembrano sottoclasse il dialg aperto standard del file. –
@UweKeim: dove viene spiegata la sottoclasse in quella domanda? Ha risposto che ha finito per usare VistaBridge – Rockstart
Qualche tempo fa ho scaricato VistaBride e ho esaminato le fonti su come l'hanno fatto. IIRC era sottoclasse della finestra di dialogo standard di apertura file. –