OpenFileDialog C#自定义过滤器,如' ABC * .pdf'

时间:2013-11-08 11:19:27

标签: c# .net filter openfiledialog

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

我只能指定* .pdf,* .doc,等。

由于 弗洛里安

5 个答案:

答案 0 :(得分:25)

已更新

在意识到以下情况会更好之后,稍微改变了我的解决方案。这不是一个完整的“硬过滤器”,但是使用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中它确实可以用于我的操作。

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

<强>结果:

enter image description here

在FileName字段中没有pro*,这将显示其他几个PDF文件。

答案 1 :(得分:3)

是和否。

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

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

答案 2 :(得分:3)

如我的评论中所述:

  

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

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

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

现在根据您的规范过滤Files - 数组:

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

要获取文件图标,您必须使用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/...
}

答案 3 :(得分:0)

答案是直截了当的:

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

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

但过滤文件名NOT可能。

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

有关详细信息,请参阅此链接:How to create customized open file dialog in C#

答案 4 :(得分:-2)

使用此:

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