2009-03-01 80 views
13

我想在我的应用程序中有一个文件夹浏览器,但是我不想想使用FolderBrowserDialog。 (由于几个原因,如使用它很痛苦)使用OpenFileDialog作为目录,而不是FolderBrowserDialog

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

作为一个例子,µTorrent有一个很好的实现(首选项/目录/把新的下载:)。标准的打开文件对话框让用户:

  • 粘贴在文本框中完整路径在底部
  • 使用“收藏夹链接”栏上Vista的在Vista
  • 使用搜索
  • 自动记忆上次目录
  • 更多...

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

+1

似乎http://stackoverflow.com/questions/31059/how-do-you-configure-an-openfiledialog-to-select-folders – 2009-03-01 19:33:16

回答

4

我不确定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); 
} 

完整的代码可以找到here

0

请参阅this answer作者leetNightShade获取工作解决方案。

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

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

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

下载代码here

0

WindowsAPICodePack

var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog(); 
dlg.IsFolderPicker = true; 
相关问题