在使用 Win32 / WPF / Windows Forms 的打开或保存文件对话框的时候,多数情况下我们都会考虑编写文件过滤器。UWP 中有 FileTypeFilter
集合可以添加不同的文件种类,但 Win32 中却是一个按一定规则组合而成的字符串。
因为其包含一定的格式,所以可能写错。本文介绍如何编写 Filter。
编写 Filter
Filter 使用竖线分隔不同种类的过滤器,比如 图片|*.png;*.jpg|文本|*.txt|walterlv 的自定义格式|*.lvyi
。
1 2 3 | var dialog = new OpenFileDialog(); dialog.Filter = "图片|*.png;*.jpg|文本|*.txt|walterlv 的自定义格式|*.lvyi"; dialog.ShowDialog(this); |
---|
有时我们会看到一些程序的过滤器里面显示了过滤器本身,而不止是名称,实际上是因为名称中包含了过滤器:
1 | 图片 (png, jpg)|*.png;*.jpg|文本 (txt)|*.txt|walterlv 的自定义格式 (lvyi)|*.lvyi |
---|
你不可以在过滤器中省略名称或者过滤器任何一个部分,否则会抛出异常。
附:如何显示对话框
对于 .NET Core 版本的 WPF 或者 Windows Forms 程序来说,需要安装 Windows 兼容 NuGet 包:
- Microsoft.Windows.Compatibility
安装后可以使用 Windows Forms 版本的 OpenFileDialog
或者 WPF 版本的 Microsoft.Win32.OpenFileDialog
。
参考资料
- FileDialog.Filter Property (Microsoft.Win32) - Microsoft Docs
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/how-to-write-win32-file-dialog-filter.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。