基于内容过滤OpenFileDialog中显示的文件?
有没有办法修改OpenFileDialog的行为,以便它查看打开到的文件夹中的文件,然后根据其内容忽略某些文件中的文件?
一个例子是打开一个完整的Zip文件的文件夹,但只显示包含某个文件的文件夹。
从文档中,有HookProc,但我不确定如何使用它。
请注意,如果可能的话,我意识到这将是一个相对缓慢的操作。 目前我不关心性能。
谢谢!
我不会忽视OpenFileDialog的复杂性。 构建一个真正有效的程序并不容易。 当你建立你自己的时候,它不是“正常”的对话框,因此它会让用户感到困惑。 即使你做得很好也是如此,这很困难。 所以我建议你坚持延伸现有的东西,而不是写一些新东西。
检查这篇文章的OFD的扩展可能会/可能会调整到做你想要的。 在C#中编写回调函数可以响应路径选择。
相关:FolderBrowserDialogEx是FolderBrowserDialog上的一个类似的扩展名。 尽管名称不同,您可以将其配置为搜索文件以及文件夹。 有一个回调会在选择某个东西(一个文件夹,一个文件)时被调用,并且在回调中你可以做你需要做的事情。 例如,查看文件夹内的文件并填充仅显示这些文件的文件列表。
您可能会考虑的另一个选项是Ookii的对话库。 这是OpenFileDialog的开源实现,它包含了Vista中所有新对话框的COM包装器。 使用该库,您可以弹出Vista OpenFileDialog,并使用C#代码从IFileDialogEvents接口接收事件。 一个这样的事件是OnFolderChange()。 在处理程序中,你可以调用IFolder.GetFolder(),它会给你一个IShellItem,它给你用户正在改变的文件夹。 下一步将逐项列出并潜在地过滤这组文件,这是我将留给读者的练习。
不,您必须为此实现您自己的功能。 但说实话,无论如何,OpenFileDialog确实不会做很多事情。 说实话,是的,你可能可以将它嵌入其中,但是当真正的工作是检查文件的内容时,你会做很多工作,然后你可以编写你自己的简单的OpenFileDialog类那。
您可能会发现这个问题对于列出zip文件的内容有帮助:
如何列出c#中.zip文件夹的内容?
(请注意,您可能会使用它来提高性能,但不会跨越多个线程)
您可以使用Windows API代码包(随源提供)。 “公用文件”对话框功能比Winforms / WPF中的版本公开了更多的文件对话框功能。
http://code.msdn.microsoft.com/WindowsAPICodePack
链接地址: http://www.djcxy.com/p/42657.html上一篇: Filtering the files shown in OpenFileDialog based on content?