将 CommonFileDialog 自定义为文件夹和文件选取器
本文关键字:文件 选取 文件夹 CommonFileDialog 自定义 | 更新日期: 2023-09-27 17:56:45
我正在尝试用 C# 制作一个"文件和文件夹"对话框。(只是一个警告:我会对所有FolderBrowserDialog
建议投反对票。这种对话是自然的可憎之物)
目前,我正在使用WindowsApiCodePack中找到的CommonOpenFileDialog
,它具有属性IsFolderPicker
,这使对话框仅成为文件夹选择器。但是我的用户需要能够选择文件或文件夹。
所以我正在寻找一个对话框,让我同时选择文件和文件夹。手段无关紧要。C#,WPF,WindowsApiCodePack,Ookii对话框,C++,P/Invoke,Com+,Win32,VB等...
我只需要一个控件,它允许我选择一个文件或文件夹,我可以从 C# 调用它,并且具有默认的 Windows OpenFileDialog 外观。这可能吗,如何?
几年前我自定义了FolderBrowser
对话框。我让它显示输入字段,用户可以在其中指定路径而无需浏览它。我认为可以自定义以显示文件和文件夹。
这就是我进行自定义的方式:
我使用.NET Reflector来反汇编FolderBrowserDialog
的代码。我将反汇编的代码保存为 MyFolderBrowserDialog
.
在反射的代码中,我发现FolderBrowserDialog
调用非托管 windows 函数SHBrowseForFolder
该函数接受BROWSEINFO
结构作为参数。BROWSEINFO
结构具有 ulFlags
成员,该成员是一个标志值,可以对其进行位屏蔽以包含要使用的功能。
在MyFolderBrowserDialog
位屏蔽BIF_EDITBOX (0x00000010)
到ulFlags
中以获取输入字段。
根据文档,如果您将位掩码BIF_BROWSEINCLUDEFILES (0x00004000)
ulFlags
它应该包括文件和文件夹,从而解决您的问题。
我实际上还没有尝试让它显示文件,但我认为它可能值得一试。
希望这有帮助!