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”条目
  • 通过循环这些扩展来构造筛选器字符串

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

  • 对用户可以选择的所有文件执行递归目录搜索。(希望这是一小部分文件夹。)
  • 唯一标识这些文件上的扩展名。(System.IO.Path.GetExtension()和Linq的.Distint()方法在这里可能工作得很好)
  • 从列表中删除“.txt”条目
  • 通过循环这些扩展来构造筛选器字符串

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


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

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


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

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

      我可以想出几个选择:

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

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


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

      使用BCL OpenFileDialog没有直接的方法

      我可以想出几个选择:

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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

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