【问题标题】:OpenFileDialog C# custom filter like 'ABC*.pdf'OpenFileDialog C# 自定义过滤器,例如 'ABC*.pdf'
【发布时间】:2013-11-20 09:21:50
【问题描述】:

是否可以指定像 'ABC*.pdf' 这样的自定义过滤器,这意味着:“显示所有以 ABC 开头的 PDF”?

我只能指定*.pdf*.doc*.*

谢谢 弗洛里安

【问题讨论】:

  • 不幸的是,这是不可能的。但你可以创建自己的FileDialog
  • 单独使用Filter属性是不行的,但是基本上可以通过使用FileName属性,在里面输入ABC*来达到这个效果。

标签: c# .net filter openfiledialog


【解决方案1】:

更新

在意识到以下内容会更好之后,稍微改变了我的解决方案:

这不是一个完整的“硬过滤器”,但使用 FileName 属性应该仍然可以满足您的需求:

using System;
using System.Windows.Forms;

namespace TestingFileOpenDialog
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.FileName = "pro*";
            this.openFileDialog1.Filter = "Pdf Files|*.pdf";
            this.openFileDialog1.ShowDialog();
        }
    }
}

我想这可能取决于您使用的操作系统,但它确实适用于我的情况,在 Windows 8 上。

我也意识到这不会“永久”过滤掉所有不相关的文件,但它至少提供了一个初始过滤器。

结果:
文件名字段中没有 pro*,这将显示其他几个 PDF 文件

【讨论】:

  • +1 是的,它在 Windows 7 中为我工作。我认为这正是 OP 正在寻找的。​​span>
  • 绝对是实现这一目标的一种方式。但可以完全按照 .NET 5.0 中预期的 OP 进行操作(我不知道从哪个版本开始)。
【解决方案2】:

是和不是。

:查看MSDN,页面。过滤器不是那样使用的。它仅适用于扩展。

:您可以编写自己的类来扩展/模仿 OpenFileDialog,使用一些正则表达式来执行您想要的操作,然后简单地针对当前文件夹中的所有文件运行该匹配项(可能做一些工作,但如果你真的很想要它,那就去做吧:))

【讨论】:

  • 谢谢,我认为只有一个带有过滤文件的 ListBox 对我来说是最好和最快的解决方案
  • 那么你去...问题解决了。将您最喜欢的答案标记为答案,然后回到编码我猜:)
【解决方案3】:

正如我在评论中所说:

很遗憾,这是不可能的。但是你可以创建自己的 FileDialog

要创建自己的 FileDialog,可以使用以下方法:

  string[] Directories = Directory.GetDirectories(Path);
  string[] Files = Directory.GetFiles(Path);

现在根据您的要求过滤Files-Array:

List<string> wantedFiles = Files.ToList().Where(x => x.StartsWith("ABC"));

要获取文件Icons,必须使用Shell32.dll的DLLImport

[DllImport("shell32.dll")]

SO question 中提供的代码应该可以解决问题。

可以在这里找到实现我兄弟编写的自己的 FileDialogs 的项目: Download project

简而言之,这应该可以解决问题:

foreach (string file in Directory.GetFiles(Path)
                                 .Where(x => new DirectoryInfo(x).Name.StartsWith("ABC")))
{
    //Add the string to your ListView/ListBox/...
}

【讨论】:

  • 请注意,此答案中链接到的网站已被感染。
【解决方案4】:

答案很简单:

您可以将过滤器设置为仅允许具有属性Filter 的特定文件类型,如下所示:

fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

但过滤文件名是NOT 可能的。

在这种情况下,您可以创建自己的自定义 OpenFIleDialog

查看此链接了解更多信息:How to create customized open file dialog in C#

【讨论】:

  • 使用 Java 中的 FileChooser 是可能的,所以我认为 C# 中也有办法
  • FileChooser 由 Java 渲染,OpenFileDialog 由 Win32 渲染,后者不支持
【解决方案5】:

我再次检查了它,似乎对于 .NET 5.0 它的工作方式与 OP 预期的一样。

var fileSelector = new OpenFileDialog()
{
  Filter = "ABC Files|abc*.pdf";  
};

这样,FileDialog 将只显示以“abc”开头的 .pdf 文件。

【讨论】:

    【解决方案6】:

    使用这个:

    Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
    myDialog..DefaultExt = ".pdf";
    myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf
    

    【讨论】:

    • 明明这是原贴的第一次尝试,还是不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2015-09-19
    相关资源
    最近更新 更多