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

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

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

例如, μTorrent有一个很好的实现(首选项/目录/把新的下载:)。 标准的打开文件对话框使用户能够:

  • 在底部的文本字段中粘贴完整path
  • 使用Vista上的“collections夹链接”栏
  • 在Vista上使用search
  • 自动记住上一个目录
  • 更多…

有谁知道如何实现这个? 在C#中。

Solutions Collecting From Web of "使用OpenFileDialog作为目录,而不是FolderBrowserDialog"

我不知道uTorrent,但这听起来很像新的Vista的IFileDialog与FOS_PICKFOLDERS选项设置。 通用的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); } 

完整的代码可以在这里找到。

请参阅leetNightShade的解答。

我相信有三件事使得这个解决方案比所有其他解决方案更好。

  1. 使用起来很简单。 它只需要在项目中包含两个文件(可以合并为一个文件)。
  2. 在XP或更老的系统上使用时,它会回落到标准的FolderBrowserDialog 。
  3. 作者允许您将代码用于您认为合适的任何目的。

    没有任何许可证,你可以自由采取和使用代码你会。

在这里下载代码。

WindowsAPICodePack

 var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog(); dlg.IsFolderPicker = true;