在OpenFileDialog中选择文件/文件夹

本文关键字:文件夹 文件 选择 OpenFileDialog | 更新日期: 2023-09-27 18:17:37

我需要从系统中定制OpenFileDialog。Win32命名空间(现代'Vista'对话框)。我在System.Windows.Forms命名空间中找到了一些关于如何使用旧式对话框的好文章。设置一个NativeWindow并重载windowproc方法。当我这样做的文件对话框从Win32命名空间,一切工作正常(意味着我得到所有的通知)期望得到WM_NOTIFY消息时,一个文件已被选中。

我发现另外任何子控件的文件对话框使用EnumChildWindows(…)和注册WndProc/WM_NOTIFY,但没有CDN_TYPECHANGE通知

是否有一种好的方法可以从System.Win32中获得关于当前选定文件/文件夹的通知?OpenFileDialog课吗?

任何帮助都将不胜感激,

Asc

在OpenFileDialog中选择文件/文件夹

自定义新的Vista文件对话框的处理方式与旧式的XP文件对话框完全不同。你不再处理资源模板,窗口程序等

在对话框接口上使用QueryInterface来获得IFileDialogCustomize接口。然后使用它的方法自定义对话框。网上有很多这样的例子。例如,这里有一个来自MSDN:公共项目对话框,自定义对话框。你能找到的大多数例子都是c++的,但由于API是基于COM的,所以很容易将它们映射到c#。

现在,从你的问题来看,你感兴趣的与其说是定制,不如说是通知。在这种情况下,您需要查看IFileDialogEvents接口。您可以向对话框提供该接口的实现,然后接收各种事件的通知,包括文件夹和选择更改。通过调用IFileDialog::Advise订阅对话框的事件。

您可能会发现API CodePack中的接口翻译非常有用。