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