c# - 在 Windows 10 中使用 CommonOpenFileDialog 选择文件夹但仍显示文件夹中的文件
问题描述
我试图使用CommonOpenFileDialog
允许用户选择一个文件夹,但也可以在对话框中查看文件夹中的文件。目前我的代码只允许用户选择一个文件夹,但其中的文件是隐藏的,这导致用户认为他们选择了错误的(空)文件夹。
using (var dlg = new CommonOpenFileDialog()
{
Title = "Select folder to import from",
AllowNonFileSystemItems = true,
IsFolderPicker = true,
EnsurePathExists = true,
Multiselect = false,
ShowPlacesList = true
})
{
if (dlg.ShowDialog() == CommonFileDialogResult.Ok)
{
//Do things with the selected folder and the files within it...
}
}
如何实现面向 Windows 10 的应用程序的目标?
注意:有一个非常相似的问题,标题为“如何使 CommonOpenFileDialog 仅选择文件夹,但仍显示文件? ”。这个问题已经有了很好的答案,但是,没有一个解决方案适用于 Windows 10。由于现有问题已过时(9 年前提出)并且不适用于 Windows 10,因此此问题专门要求在 Windows 10 设备上运行的解决方案。
解决方案
我认为 CommonOpenFileDialog 无法做到这一点,
请参阅:How to use IFileDialog with FOS_PICKFOLDER while still display file names in the dialog
唯一的方法是创建您自己的自定义对话框,或者您可以使用带有 P/Invoke 的文件夹对话框(基于 SHBrowseForFolder like FolderBrowserDialog
)。
请参阅:http ://www.pinvoke.net/default.aspx/shell32.shbrowseforfolder
从上面的链接复制类并添加选项BIF_BROWSEINCLUDEFILES
。
public string SelectFolder(string caption, string initialPath, IntPtr parentHandle)
{
_initialPath = initialPath;
...
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_SHAREABLE | BIF_BROWSEINCLUDEFILES;
不幸的是,现在文件只显示在对话框中,例如FolderBrowserDialog
.
推荐阅读
- facebook - 带有 facebook 频道的 Bot SDK - Azure 部署之外
- python - 在python中将大数组写入文件
- django - Django 2.0:外键约束
- android - 当我重新打开活动时,KeyboardAvoidingView 在 android 上不起作用
- c++ - C ++ Char数组不起作用
- terraform - 为什么在 Terraform “aws_instance” user_data 中的 nohup 命令可能会在实例启动时失败
- css - 将动画内容隐藏在其他元素后面
- python - 删除条目后获取原始列表的索引
- python - 为 C 编写一个 TensorFlow 模型
- git-tower - 我可以使用 Git Tower 获取单个远程分支吗?