当前位置: 首页 > news >正文

如何为 Win32 的打开和保存对话框编写文件过滤器(Filter)

在使用 Win32 / WPF / Windows Forms 的打开或保存文件对话框的时候,多数情况下我们都会考虑编写文件过滤器。UWP 中有 FileTypeFilter 集合可以添加不同的文件种类,但 Win32 中却是一个按一定规则组合而成的字符串。

因为其包含一定的格式,所以可能写错。本文介绍如何编写 Filter。


本文内容

    • 编写 Filter
    • 附:如何显示对话框

编写 Filter

Filter 使用竖线分隔不同种类的过滤器,比如 图片|*.png;*.jpg|文本|*.txt|walterlv 的自定义格式|*.lvyi

var dialog = new OpenFileDialog();
dialog.Filter = "图片|*.png;*.jpg|文本|*.txt|walterlv 的自定义格式|*.lvyi";
dialog.ShowDialog(this);

过滤器的显示效果

有时我们会看到一些程序的过滤器里面显示了过滤器本身,而不止是名称,实际上是因为名称中包含了过滤器:

图片 (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/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可破坏源码兼容性
  • 使用 ProcessMonitor 找到进程所操作的文件的路径
  • MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译
  • git 配置错误导致无法推送远端仓库?本文介绍各种修复方式
  • WPF 很少人知道的科技
  • WPF 程序的编译过程
  • 制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)
  • .NET 的程序集加载上下文
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • Windows 10 解决无法完整下载安装语言包(日语输入法无法下载使用)
  • 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)
  • 如何快速创建 Visual Studio 代码片段?
  • 从 git 的历史记录中彻底删除文件或文件夹
  • 如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【翻译】babel对TC39装饰器草案的实现
  • Angular 响应式表单 基础例子
  • Angular 响应式表单之下拉框
  • Git同步原始仓库到Fork仓库中
  • HTML5新特性总结
  • JavaScript DOM 10 - 滚动
  • JAVA之继承和多态
  • Promise面试题2实现异步串行执行
  • React-Native - 收藏集 - 掘金
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 读懂package.json -- 依赖管理
  • 工作中总结前端开发流程--vue项目
  • 简单易用的leetcode开发测试工具(npm)
  • 理解在java “”i=i++;”所发生的事情
  • 巧用 TypeScript (一)
  • 一个SAP顾问在美国的这些年
  • 应用生命周期终极 DevOps 工具包
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 选择阿里云数据库HBase版十大理由
  • ​secrets --- 生成管理密码的安全随机数​
  • ![CDATA[ ]] 是什么东东
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #if #elif #endif
  • $.ajax()方法详解
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)linux 命令大全
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net 程序发生了一个不可捕获的异常
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET程序员迈向卓越的必由之路