自定义CommonFileDialog到文件夹和文件选择器

时间:2013-01-30 15:15:07

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

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

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

所以我正在寻找一个允许我同时选择文件和文件夹的对话框。手段并不重要。 C#,WPF,WindowsApiCodePack,Ookii对话框,C ++,P / Invoke,Com +,Win32,VB等......

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

根据文档,如果您将BIF_BROWSEINCLUDEFILES (0x00004000)添加到ulFlags,它应该包含文件和文件夹,从而解决您的问题。

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

希望这有帮助!