【问题标题】:using OpenFileDialog for directory, not FolderBrowserDialog使用 OpenFileDialog 作为目录,而不是 FolderBrowserDialog
【发布时间】:2010-10-10 15:56:12
【问题描述】:
我想在我的应用程序中有一个文件夹浏览器,但我不想想使用 FolderBrowserDialog。 (有几个原因,比如使用起来很痛苦)
我想使用标准的 OpenFileDialog,但针对目录进行了修改。
例如,µTorrent 有一个很好的实现(Preferences/Directories/Put new downloads in:)。标准的打开文件对话框使用户能够:
- 在底部的文本字段中粘贴完整路径
- 在 Vista 上使用“收藏链接”栏
- 在 Vista 上使用搜索
- 自动记住上一个目录
- 更多...
有人知道如何实现吗?在 C# 中。
【问题讨论】:
标签:
c#
wpf
windows
winforms
【解决方案1】:
我不确定 uTorrent,但这听起来很像带有 FOS_PICKFOLDERS 选项的新 Vista 的 IFileDialog。它的通用 C# 代码如下所示:
var frm = (IFileDialog)(new FileOpenDialogRCW());
uint options;
frm.GetOptions(out options);
options |= FOS_PICKFOLDERS;
frm.SetOptions(options);
if (frm.Show(owner.Handle) == S_OK) {
IShellItem shellItem;
frm.GetResult(out shellItem);
IntPtr pszString;
shellItem.GetDisplayName(SIGDN_FILESYSPATH, out pszString);
this.Folder = Marshal.PtrToStringAuto(pszString);
}
完整代码可以在here找到。
【解决方案2】:
WindowsAPICodePack
var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog();
dlg.IsFolderPicker = true;