OpenFileDialog C# 自定义过滤器,例如 'ABC*.pdf'
Posted
技术标签:
【中文标题】OpenFileDialog C# 自定义过滤器,例如 \'ABC*.pdf\'【英文标题】: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*
来达到这个效果。
【参考方案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
【讨论】:
明明这是原贴的第一次尝试,还是不行。以上是关于OpenFileDialog C# 自定义过滤器,例如 'ABC*.pdf'的主要内容,如果未能解决你的问题,请参考以下文章
C# - 如何在 OpenFileDialog 中允许多种文件类型?