有没有办法修改OpenFileDialog的行为,以便它查看它打开的文件夹中的文件内部,然后根据其内容忽略某些文件?
一个例子是打开一个充满Zip文件的文件夹,但只显示包含某个文件的文件夹.
从文档中,有HookProc,但我不确定我是如何使用它的.
请注意,如果可能,我意识到这将是一个相对缓慢的操作.目前我并不关心性能.
谢谢!
解决方法
我不会忽视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,它将为您提供用户正在更改的文件夹.下一步是逐项列出并可能过滤文件集,这是我将留给读者的练习……