he modificado el código de C# a VB, y mi env es VS2015 + Office 2010. Mi código es ligeramente diferente a la de Daniel, como una función del código de Daniel apoya a sólo Office 2003/2007
Mediante el uso de una nueva instancia de Excel, será más lenta que la simple apertura de OpenFileDialog o OpenFolderDialog, pero es mucho más fácil de usar. Mi programa solo llama a este código una vez, por lo que intercambiar el rendimiento por facilidad de uso no es una preocupación en mi 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
Si quieres una versión de C#, creo que usted es lo suficientemente inteligente como para portarlo a C# :)
Ver [esta pregunta] (http://stackoverflow.com/questions/1250991/visual-studio-2008-folder-browser-dialog?rq=1). Básicamente parecen subclasificar el archivo estándar dialg abierto. –
@UweKeim: ¿Dónde se explica la subclase en ese hilo de pregunta? Él respondió que terminó usando VistaBridge – Rockstart
Hace algún tiempo descargué VistaBride y examiné las fuentes sobre cómo lo hicieron. IIRC era subclases del diálogo de abrir archivo estándar. –