.NET 5 WinForms中FolderBrowserDialog显示异常,如何获取旧式文件夹选择对话框
问题原因
你遇到的两种对话框是Windows不同时期推出的原生文件夹选择控件:
- 你期望的第一张图是Vista及更高版本Windows推出的新式资源管理器风格文件夹选择对话框,支持直接输入路径、快速访问栏跳转、搜索等功能
- 实际弹出的第二张图是Windows XP时代就存在的旧版树状文件夹选择对话框,是.NET中
FolderBrowserDialog的默认实现
这个差异不是.NET框架做了破坏性变更,是.NET出于向下兼容老旧系统的考虑,默认没有启用新式对话框。
调出第一种新式对话框的方案
根据你使用的.NET版本不同,对应方案如下:
- 如果你使用的是 .NET Core 3.0 / .NET 5 及更高版本的WinForms:
只需要给FolderBrowserDialog开启自动升级属性即可,修改代码如下:var fbd = new FolderBrowserDialog(); fbd.Description = "test"; fbd.ShowNewFolderButton = true; // 新增这一行,系统会自动适配调用新式对话框 fbd.AutoUpgradeEnabled = true; if(fbd.ShowDialog() == DialogResult.OK) { // 原有业务逻辑 } - 如果你使用的是 .NET Framework 版本的WinForms:
默认FolderBrowserDialog没有公开启用新式对话框的开关,你可以选择两种实现方式:- 引入微软官方的Windows API Code Pack组件,调用其中的
CommonOpenFileDialog,设置IsFolderPicker = true即可调出新式文件夹选择框 - 自行封装Windows原生的
IFileDialogCOM接口,指定为文件夹选择模式后调用
- 引入微软官方的Windows API Code Pack组件,调用其中的
内容的提问来源于stack exchange,提问作者Damn Vegetables
相关产品推荐
相关产品推荐

