OpenFileDialog C#自定义filter,如’ABC * .pdf’

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

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

谢谢Florian

更新

在意识到以下情况会更好之后,稍微改变了我的解决方案。 这不是一个完整的“硬filter”,但是使用FileName属性应该基本上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上。

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

结果:

在此处输入图像描述

如果没有FileName字段中的pro* ,则会显示其他几个PDF文件。

是的,不是。

:请查看MSDN页面。 filter不是那样使用的。 它只适用于扩展。

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

正如我的评论所述:

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

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

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

现在按照您的规范过滤Files -Array:

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

要获取文件图标,您必须使用Shell32.dll的DLLImport

 [DllImport("shell32.dll")] 

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

可以在此处找到实现由我兄弟编写的自己的FileDialogs的项目 : 下载项目

简而言之,这应该成功:

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

答案是直截了当的:

您可以将“filter”设置为仅允许具有属性Filter特定文件类型:

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

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

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

有关详细信息,请参阅此链接: 如何在C#中创建自定义打开文件对话框

用这个:

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