【问题标题】:Customize CommonFileDialog to Folder and File Picker自定义 CommonFileDialog 到文件夹和文件选择器
【发布时间】:2013-01-30 15:15:07
【问题描述】:

我正在尝试在 C# 中创建文件和文件夹对话框。 (只是一个警告:我会否决所有FolderBrowserDialog 的建议。该对话是对大自然的憎恶)

目前我正在使用 WindowsApiCodePack 中的CommonOpenFileDialog,它具有IsFolderPicker 属性,这使得对话框仅成为文件夹选择器。 但我的用户需要能够选择文件或文件夹。

所以我正在寻找一个对话框,让我可以同时选择文件和文件夹。手段无所谓。 C#、WPF、WindowsApiCodePack、Ookii 对话框、C++、P/Invoke、Com+、Win32、VB 等...

我只需要一个可以让我选择文件或文件夹的控件,我可以从 C# 调用它,并且具有默认的 Windows OpenFileDialog 外观。这可能吗?如何实现?

【问题讨论】:

  • 嗯,看起来像 OpenFileDialog 的东西如何能够同时选择文件和文件夹?如果你去一个文件夹里面选择一个文件,它不会选择文件夹吗?
  • 文件夹浏览器的工作方式相同。您双击该文件夹,它会导航到该文件夹​​。您单击一个文件夹,单击“打开”按钮(在右下角),它会关闭对话框并返回所选文件夹。

标签: c# windows-api-code-pack


【解决方案1】:

几年前我定制了FolderBrowser 对话框。 我让它显示输入字段,用户可以在其中指定路径而无需浏览它。我认为可以自定义显示文件和文件夹。

这就是我进行自定义的方式:

我使用 .NET Reflector 来反汇编FolderBrowserDialog 的代码。我将反汇编代码保存为MyFolderBrowserDialog

在反映的代码中,我发现FolderBrowserDialog 调用了非托管窗口函数SHBrowseForFolder,它接受BROWSEINFO 结构作为参数。 BROWSEINFO 结构有 ulFlags 成员,它是一个标志值,可以被位掩码以包含您要使用的功能。

MyFolderBrowserDialog 中将BIF_EDITBOX (0x00000010) 位掩码到ulFlags 以获取输入字段。

根据文档,如果您将BIF_BROWSEINCLUDEFILES (0x00004000) 位掩码为ulFlags,它应该包括文件和文件夹,从而解决您的问题。

我实际上并没有尝试让它显示文件,但我认为它可能值得一试。

希望这会有所帮助!

【讨论】:

  • 我发现我的帖子有误。我写道,我将对所有 FileBrowserDialogs 投反对票,但我的意思是 FolderBrowserDialog。我不会使用 FolderBrowserDialog,即使我知道我可以在其中显示文件。
  • 为什么不自己构建呢?我们曾经使用TreeViewFileSystemWatcher 自己构建了一个以使其保持最新状态。
  • 因为那将是重新发明轮子。我不想花时间复制 Windows 经典、7 和 8 的主题并重新做所有的逻辑。这只是对现有控件的一项修改..
猜你喜欢
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2019-03-17
相关资源
最近更新 更多