5

我试图在我的 C# openFileDialog 上放置一个过滤器,排除某些文件扩展名。例如,我希望它显示目录中不是 .txt 文件的所有文件。

有没有办法做到这一点?

4

6 回答 6

4

我不认为这是可能的。过滤器的设置方式是您可以选择要显示的文件,但我认为没有办法显示“除...之外的所有文件”。想一想,你有没有在 Windows 中看到有这个的打开文件对话框?我想我从来没有见过。

您最好的选择是让他们选择所有文件,然后提示用户他们是否选择了不允许的文件,或者将其过滤到您可以处理的所有可能文件。

于 2009-05-28T16:51:34.707 回答
2

使用 BCL OpenFileDialog 没有直接的方法来执行此操作。

我可以想到几个选项:

1)制作一个过滤器,其中包含您想要支持的所有类型。这是我的建议,因为这是进行此类操作的最常见方式。

2) 使用与此自定义 OpenFileDialog 实现类似的东西。然后,如果所选文件具有 .txt 扩展名,您可以覆盖 OnFileNameChanged() 方法以禁用“打开”按钮。

3) 让用户选择一个 .txt 文件,抛出一个错误对话框,然后重新打开文件对话框。不过,这对我来说感觉很笨重,而且不太好......

于 2009-05-28T16:52:16.500 回答
1

通过 Google 搜索“OpenFileDialog”找到

编辑:很抱歉没有扩展 EXCLUDE 方面。你可能不需要走到这个极端,但它会满足你的需求......

  • 对用户可以选择的所有文件进行递归目录搜索。(希望这是一小组文件夹。)
  • 唯一标识这些文件的扩展名。(System.IO.Path.GetExtension() 和 Linq 的 .Distint() 方法在这里可能很好用)
  • 从列表中删除“.txt”条目。
  • 通过循环这些扩展来构造一个过滤器字符串。
于 2009-05-28T16:46:25.373 回答
0

恐怕这是不可能的。你要么必须

  • a) 包括一长串应允许的所有扩展名,或

  • b) 允许所有扩展名,然后使用简单的签入代码重新打开对话框,如果所选文件具有扩展名.txt.

另外,您能否为这个问题提供更多背景信息?我无法设想一个我可能明确需要排除某个扩展名的场景。在几乎所有情况下,您可能无法仅使用过滤器(也许还有一点代码检查)。

于 2009-05-28T16:55:16.493 回答
0

这是一种完全不同的方法,您不太可能使用。

不要使用 OpenFileDialog,而是分析您需要的特定功能并创建您自己的对话框。您可以轻松地提供您想要的任何过滤,但随后困难转移到实施和维护新 UI。

我不建议您这样做,但有时用户会坚持他们需要什么。

另一种选择:不要使用对话框,而是想出完全不同的东西,非常适合应用程序。这可能是不可能的,但是我们对应用程序知之甚少。

于 2009-05-28T17:34:54.637 回答
0

您不能设置过滤器以从文件对话框中排除扩展名。

FileOk但是,您可以在对话框上为事件实现委托。此事件在用户选择的文件将被接受之前触发,并且事件参数提供了一个Cancel您可以设置为禁止选择的属性。

它不像实际上使错误的文件不可见那样优雅,但它允许您禁止选择错误的文件类型。

PS:不要忘记向用户反馈文件不被接受的原因,否则他们可能会想知道为什么当他们选择“txt”文件时对话框没有关闭。

于 2009-05-29T02:18:32.520 回答