使用 OpenFileDialog 作为目录,而不是 FolderBrowserDialog

Posted

技术标签:

【中文标题】使用 OpenFileDialog 作为目录,而不是 FolderBrowserDialog【英文标题】:using OpenFileDialog for directory, not FolderBrowserDialog 【发布时间】:2010-10-10 15:56:12 【问题描述】:

我想在我的应用程序中有一个文件夹浏览器,但我不想想使用 FolderBrowserDialog。 (有几个原因,比如使用起来很痛苦)

我想使用标准的 OpenFileDialog,但针对目录进行了修改。

例如,µTorrent 有一个很好的实现(Preferences/Directories/Put new downloads in:)。标准的打开文件对话框使用户能够:

在底部的文本字段中粘贴完整路径 在 Vista 上使用“收藏链接”栏 在 Vista 上使用搜索 自动记住上一个目录 更多...

有人知道如何实现吗?在 C# 中。

【问题讨论】:

似乎是***.com/questions/31059/…的骗子 这个问题的重复:-How do you configure an OpenFileDIalog to select folders? 【参考方案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;

【讨论】:

【参考方案3】:

请参阅leetNightShade 的this answer 以获得可行的解决方案。

我认为有三点让这个解决方案比其他所有解决方案都要好。

    使用简单。 它只需要您在项目中包含两个文件(无论如何都可以合并为一个)。 在 XP 或更早的系统上使用时,它会回退到标准 FolderBrowserDialog。 作者允许将代码用于您认为合适的任何目的。

    没有许可证,您可以随意获取和使用代码。

下载代码here。

【讨论】:

以上是关于使用 OpenFileDialog 作为目录,而不是 FolderBrowserDialog的主要内容,如果未能解决你的问题,请参考以下文章

打开目录对话框

打开目录对话框

OpenFileDialog 永久存储文件

从 OpenFileDialog 路径/文件名中提取路径

Winform控件:打开文件对话框(OpenFileDialog)

OpenFileDialog 打开文件对话框