我试图在我的 C# openFileDialog 上放置一个过滤器,排除某些文件扩展名。例如,我希望它显示目录中不是 .txt 文件的所有文件。
有没有办法做到这一点?
我试图在我的 C# openFileDialog 上放置一个过滤器,排除某些文件扩展名。例如,我希望它显示目录中不是 .txt 文件的所有文件。
有没有办法做到这一点?
我不认为这是可能的。过滤器的设置方式是您可以选择要显示的文件,但我认为没有办法显示“除...之外的所有文件”。想一想,你有没有在 Windows 中看到有这个的打开文件对话框?我想我从来没有见过。
您最好的选择是让他们选择所有文件,然后提示用户他们是否选择了不允许的文件,或者将其过滤到您可以处理的所有可能文件。
使用 BCL OpenFileDialog 没有直接的方法来执行此操作。
我可以想到几个选项:
1)制作一个过滤器,其中包含您想要支持的所有类型。这是我的建议,因为这是进行此类操作的最常见方式。
2) 使用与此自定义 OpenFileDialog 实现类似的东西。然后,如果所选文件具有 .txt 扩展名,您可以覆盖 OnFileNameChanged() 方法以禁用“打开”按钮。
3) 让用户选择一个 .txt 文件,抛出一个错误对话框,然后重新打开文件对话框。不过,这对我来说感觉很笨重,而且不太好......
通过 Google 搜索“OpenFileDialog”找到
编辑:很抱歉没有扩展 EXCLUDE 方面。你可能不需要走到这个极端,但它会满足你的需求......
恐怕这是不可能的。你要么必须
a) 包括一长串应允许的所有扩展名,或
b) 允许所有扩展名,然后使用简单的签入代码重新打开对话框,如果所选文件具有扩展名.txt
.
另外,您能否为这个问题提供更多背景信息?我无法设想一个我可能明确需要排除某个扩展名的场景。在几乎所有情况下,您可能无法仅使用过滤器(也许还有一点代码检查)。
这是一种完全不同的方法,您不太可能使用。
不要使用 OpenFileDialog,而是分析您需要的特定功能并创建您自己的对话框。您可以轻松地提供您想要的任何过滤,但随后困难转移到实施和维护新 UI。
我不建议您这样做,但有时用户会坚持他们需要什么。
另一种选择:不要使用对话框,而是想出完全不同的东西,非常适合应用程序。这可能是不可能的,但是我们对应用程序知之甚少。
您不能设置过滤器以从文件对话框中排除扩展名。
FileOk
但是,您可以在对话框上为事件实现委托。此事件在用户选择的文件将被接受之前触发,并且事件参数提供了一个Cancel
您可以设置为禁止选择的属性。
它不像实际上使错误的文件不可见那样优雅,但它允许您禁止选择错误的文件类型。
PS:不要忘记向用户反馈文件不被接受的原因,否则他们可能会想知道为什么当他们选择“txt”文件时对话框没有关闭。