Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的“打开文件”对话框中排除文件扩展名_C#_Visual Studio_Openfiledialog - Fatal编程技术网

C# 从C中的“打开文件”对话框中排除文件扩展名

C# 从C中的“打开文件”对话框中排除文件扩展名,c#,visual-studio,openfiledialog,C#,Visual Studio,Openfiledialog,我试图在我的C openFileDialog上设置一个过滤器,它排除某些文件扩展名。例如,我希望它显示目录中不是.txt文件的所有文件 有办法做到这一点吗 编辑:很抱歉没有展开排除方面。你可能不需要走到这个极端,但它会满足你的需要 对用户可以选择的所有文件执行递归目录搜索。希望这是一小部分文件夹。 唯一标识这些文件上的扩展名。System.IO.Path.GetExtension和Linq的.Distint方法在这里可以很好地工作 从列表中删除.txt条目。 通过循环这些扩展来构造筛选器字符串。

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

有办法做到这一点吗

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

对用户可以选择的所有文件执行递归目录搜索。希望这是一小部分文件夹。 唯一标识这些文件上的扩展名。System.IO.Path.GetExtension和Linq的.Distint方法在这里可以很好地工作 从列表中删除.txt条目。 通过循环这些扩展来构造筛选器字符串。
我认为这是不可能的。过滤器的设置方式是,您可以选择要显示的文件,但我认为没有一种方法可以显示除…以外的所有文件。。。。想一想,你有没有见过Windows中有这样一个打开文件的对话框?我想我从来没见过


最好的办法是让他们选择所有文件,然后在用户选择不允许的文件时提示用户,或者将其筛选为您可以处理的所有可能的文件。

使用BCL OpenFileDialog无法直接做到这一点

我可以想出几个选择:

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

2使用与此类似的东西。然后,如果所选文件的扩展名为.txt,则可以重写OnFileNameChanged方法以潜在地禁用“打开”按钮


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

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

a包括应允许的所有扩展的长列表,或

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


另外,你能为这个问题提供更多的背景吗?我在设想可能需要明确排除某个扩展的场景时遇到了困难。在几乎所有情况下,您可能都无法仅凭一个过滤器和一点代码检入就逃脱惩罚。

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

不要使用OpenFileDialog,而是分析所需的特定功能并创建自己的对话框。您可以轻松地提供所需的任何筛选,但接下来的困难将转移到实现和维护新UI

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


另一种选择是:不要使用对话框,而是想出一些完全不同的适合应用程序的东西。这可能是不可能的,但我们对该应用了解不多。

您不能设置筛选器以从文件对话框中排除扩展名

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

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


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

问题是是否可以排除某些文件。您的答案显示了如何筛选到一个特定的文件。OP需要除txt以外的所有文件。不,它根本不回答我的问题。我了解过滤器的工作原理。我想排除所有的.txt文件,但不包括.txt文件。当然可以使用此筛选器。我应该提到的想法是,开发人员可能需要进行目录搜索,以找到所有可用的扩展,并将它们包括在过滤器中,但不包括过滤器中的*.txt。是的,但OpenFileDialog允许用户浏览到任何文件夹。在显示之前,您需要设置过滤器,因此,是的,您可能能够过滤掉打开对话框的目录中的文件,但是一旦用户导航到其他文件夹,您将丢失过滤器中的许多文件。BFree,我的评论提到,它们可能能够隔离到特定文件夹。如果没有,则可能需要后台进程检查系统上的所有扩展。当然,另一张海报提出了一个真正相关的问题,那就是为什么设计必须是这样。好吧,我恐怕是这样的。只是想知道有没有办法。谢谢你的回答并认真阅读我的问题。选项1听起来最好。真正的问题是,我的软件的用户要求.txt文件
我甚至不在目录中显示,因为在这种情况下,他们永远不会选择打开.txt文件。.txt文件只是把它们必须查看的文件列表弄得乱七八糟。@ZGray:这是我的建议。这是Windows中的正常工作方式。在这种情况下,我只希望用户不必处理文件列表中杂乱的.txt文件。