我正在尝试在 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”文件

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top