有没有办法修改OpenFileDialog的行为,以便它查看它打开的文件夹中的文件,然后根据其内容忽略某些文件?
一个例子是打开一个充满Zip文件的文件夹,但只显示包含某个文件的文件夹。
从文档中可以看出HookProc,但我不确定如何使用它。
请注意,如果可能,我意识到这将是一个相对缓慢的操作。目前我并不关心表现。
谢谢!
答案 0 :(得分:3)
我不会忽视OpenFileDialog的复杂性。构建一个真正有效的方法并不容易。当你构建自己的对话框时,它不是“正常”对话框,因此会让用户感到困惑。即使你做得很好也是如此,这很难。所以我建议你坚持扩展现有的东西,而不是写一些新东西。
检查可能/可能被调整的this article for an extension of OFD以完全按照您的意愿行事。你在C#中编写了一个响应路径选择的回调函数。
相关:FolderBrowserDialogEx是FolderBrowserDialog上的类似扩展。尽管名称如此,您可以将其配置为搜索文件以及文件夹。当选择某个(文件夹,文件)时会调用回调,并且在该回调中您可以执行您需要执行的操作。例如,查看文件夹中的文件并填充文件列表以仅显示那些文件。
您可能考虑的另一个选项是dialog library from Ookii。这是OpenFileDialog的一个开源实现,它包含了Vista中所有新对话框内容的COM包装器。使用该库,您可以弹出Vista OpenFileDialog并使用C#代码从IFileDialogEvents界面接收事件。一个这样的事件是OnFolderChange()。在处理程序中,您可以调用IFolder.GetFolder(),它将为您提供IShellItem,它将为您提供用户正在更改的文件夹。下一步是逐项列出并可能过滤文件集,这是我将留给读者的练习......
答案 1 :(得分:1)
不,你必须为此实现自己的功能。但说实话,OpenFileDialog无论如何都不会做很多事情。说实话,是的,你可能会陷入其中,但是当真正的工作是检查文件的内容然后你可以编写自己的简单的OpenFileDialog类时,你会做很多工作。这一点。
您可能会发现此问题对于列出zip文件的内容很有帮助:
How to list the contents of a .zip folder in c#?
(注意,您可以将其线程化以提高性能,但不要跨越多个线程)
答案 2 :(得分:0)
您可以使用Windows API代码包(随源提供)。 “公共文件”对话框功能比Winforms / WPF中的版本公开了更多的文件对话框功能。