請參閱下面的快照。這取自Visual Studio 2008中的「新項目創建」工作流程。打開文件對話框的文件夾瀏覽器對話框
此窗口用於選擇項目將存儲在其中的文件夾。我如何在我的c#應用程序中創建一個類似的窗口?
請參閱下面的快照。這取自Visual Studio 2008中的「新項目創建」工作流程。打開文件對話框的文件夾瀏覽器對話框
此窗口用於選擇項目將存儲在其中的文件夾。我如何在我的c#應用程序中創建一個類似的窗口?
它在Office中是類似的,它允許選擇一個文件夾。 唯一的區別是選擇文件夾按鈕被命名爲「確定」而不是「選擇文件夾」。
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Core.FileDialog fileDialog = app.get_FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFolderPicker);
fileDialog.InitialFileName = "c:\\Temp\\"; //something you want
int nres = fileDialog.Show();
if (nres == -1) //ok
{
Microsoft.Office.Core.FileDialogSelectedItems selectedItems = fileDialog.SelectedItems;
string[] selectedFolders = selectedItems.Cast<string>().ToArray();
if (selectedFolders.Length > 0)
{
string selectedFolder = selectedFolders[0];
}
}
當然,您需要將引用添加到Microsoft.Office.Core(如Microsoft Office 14.0對象庫)和的Microsoft.Office.Interop.Excel(Microsoft Excel中14.0對象庫)。
我發現有關默認的FolderBrowserDialog和其侷限性的好文章: http://www.ssware.com/articles/folderbrowserdialog-unmasked-everything-you-wanted-to-know-about-the-folder-browser-component-from-dotnet-framework.htm
有一個從ssware它提供了Windows資源管理器類似文件的第三者成分,它「殼牌超值大餐」(http://www.ssware.com/megapack.htm)和WinForms,ASP.net和WPF的文件夾瀏覽器控件。
我修改了代碼,從C#到VB,和我的ENV是VS2015 + Office 2010中我的代碼是不是丹尼爾的略有不同,從丹尼爾的代碼的一些功能支持,只辦公室2003/2007
通過使用新的Excel實例,它會比打開OpenFileDialog或OpenFolderDialog慢,但它更方便用戶使用。我的程序只調用一次這個代碼,所以在我的情況下,關注用戶友好性的表現並不是我關心的問題。
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
如果你想有一個C#版本,我相信你有足夠的智慧將它移植到C#:)
如果您沒有問題添加NuGet包,Microsoft.WindowsAPICodePack.Shell有CommonOpenFileDialog
是可以在「文件夾模式」下使用,它應該符合您的使用要求。
var directoryDialog = new CommonOpenFileDialog
{
IsFolderPicker = true,
Title = "Select Folder"
};
請參閱[這個問題](http://stackoverflow.com/questions/1250991/visual-studio-2008-folder-browser-dialog?rq=1)。基本上它們似乎是標準文件打開撥號的子類。 –
@UweKeim:在那個問題線程中解釋的子類在哪裏?他回答說,他最終使用VistaBridge – Rockstart
有段時間,我下載了VistaBride,並檢查了他們如何做到這一點的來源。 IIRC它是標準文件打開對話框的子類。 –