从 C# 中的打开文件对话框中排除文件扩展名
-
06-09-2019 - |
题
我正在尝试在 C# openFileDialog 上放置一个过滤器,以排除某些文件扩展名。例如,我希望它显示目录中不是 .txt 文件的所有文件。
有没有办法做到这一点?
解决方案
没有直接的方法可以使用 BCL OpenFileDialog 来执行此操作。
我可以想到几个选择:
1)创建一个过滤器,其中包含您想要支持的所有类型。这是我的建议,因为这是进行此类操作的最常见方法。
2)使用类似的东西 自定义 OpenFileDialog 实现. 。然后,如果所选文件具有 .txt 扩展名,您可以重写 OnFileNameChanged() 方法以潜在地禁用“打开”按钮。
3) 让用户选择一个 .txt 文件,弹出错误对话框,然后重新打开文件对话框。不过,这感觉很笨重,对我来说不太好......
其他提示
我不认为这是可能的。过滤器设置,方式是,你可以选择哪些文件显示,但我不认为有一种方式来显示“所有文件除外......”。试想想起来了,你见过在Windows中打开文件对话框,有这个?我不认为我见过一个。
您最好的办法是让他们选择所有文件,然后提示用户,如果他们选择一个不允许或过滤下来到所有你能对付可能的文件。
通过 Google 搜索“OpenFileDialog”找到
编辑:很抱歉没有扩展排除方面。您可能不需要走得这么极端,但它会满足您的需求......
- 对用户可以选择的所有文件进行递归目录搜索。(希望这是一小部分文件夹。)
- 唯一标识这些文件的扩展名。(System.IO.Path.GetExtension() 和 Linq 的 .Distint() 方法在这里可能效果很好)
- 从列表中删除“.txt”条目。
- 通过循环这些扩展来构造过滤器字符串。
恐怕这是不可能的。你要么必须
a) 包含应允许的所有扩展的长列表,或者
b) 允许所有扩展名,然后使用简单的签入代码,如果所选文件具有扩展名,则重新打开对话框
.txt
.
另外,您能为这个问题提供更多背景信息吗?我无法想象我可能明确需要的场景 排除 一定的延伸。在几乎所有情况下,您可能无法只使用一个过滤器(也许还需要检查一下代码)。
下面是一个完全不同的方法,这你就不可能使用。
而不是使用的OpenFileDialog的,分析你所需要的特定功能,并创建自己的对话框。你可以很容易地提供你想要的任何过滤,但随后的难度动作转移到实现和维护新的UI。
我不建议你这样做,但有时用户在他们需要什么,而坚持。
另一个替换:代替使用对话框,拿出一些完全不同的适合的应用中清楚。这是不可能的,但我们不知道很多有关的应用程序。
可以不从文件对话框设置一个过滤器的排除强>扩展。
您可以但是实施该对话框上的FileOk
事件的委托。此事件只是文件之前选择的用户将被接受,以及事件的参数提供了可以设置不允许选择一个Cancel
属性。
有没有真正做出错误的文件无形的优雅,但它可以让你禁止了错误的文件类型的选择。
PS:不要忘了给文件为什么没有被接受用户的反馈,否则他们可能会觉得奇怪,为什么对话框不打烊时,他们选择了“TXT”文件