2009-06-01 3 views
7

Есть ли способ изменить поведение OpenFileDialog, чтобы он просматривал файлы в папке, в которую он открывается, а затем игнорирует некоторые из них на основе их содержимого?Фильтрация файлов, отображаемых в OpenFileDialog на основе содержимого?

Одним из примеров является открытие папки, полной Zip-файлов, но показывающей только те, которые содержат определенный файл.

Из документации есть HookProc, но я не совсем уверен, как я буду использовать ее.

Обратите внимание: если возможно, я понимаю, что это будет относительно медленная операция. На данный момент меня не беспокоит производительность.

Спасибо!

ответ

3

Я бы не отказался от сложности OpenFileDialog. Не так просто построить тот, который действительно работает. Когда вы создаете свои собственные, это не «нормальный» диалог, и в результате он путает пользователей. Это верно, даже если вы делаете это хорошо, что сложно. Поэтому я предлагаю вам продолжать расширять то, что уже есть, вместо того, чтобы писать что-то новое.

Проверьте this article for an extension of OFD, который может быть/может быть изменен, чтобы выполнить именно то, что вы хотите. Существует обратный вызов, который вы пишете на C#, который отвечает на выбор пути.

Относно: FolderBrowserDialogEx - аналогичное расширение на FolderBrowserDialog. Несмотря на название, вы можете настроить его для поиска файлов, а также папок. Существует обратный вызов, который вызывается, когда выбрано что-то (папка, файл), и внутри этого обратного вызова вы можете делать то, что вам нужно сделать. Например, загляните внутрь файлов в папку и заполните список файлов для отображения только этими файлами.


Другой вариант, который вы можете рассмотреть, это dialog library from Ookii. Это реализация OpenFileDialog с открытым исходным кодом и включает в себя COM-обертки для всех новых элементов диалога в Vista. Используя эту библиотеку, вы можете открыть Vista OpenFileDialog и получить события из интерфейса IFileDialogEvents в коде C#. Одним из таких событий является OnFolderChange(). Внутри обработчика вы можете вызвать IFolder.GetFolder(), который доставит вам IShellItem, который даст вам папку, в которую пользователь переходит. Следующим шагом будет разбиение на разделы и потенциальная фильтрация набора файлов, который я получаю у читателя ...

+0

интересно! Я проверю это завтра. благодаря! – djcouchycouch

1

Нет, вам нужно будет реализовать свою собственную функциональность. Но, честно говоря, OpenFileDialog действительно не делает многого в любом случае. Честно говоря, да, вы, вероятно, могли бы зацепиться за него, но вы ничего не делаете для работы, когда настоящая работа заключается в проверке содержимого файлов, а затем вы можете написать свой собственный класс OpenFileDialog поверх что.

Вы можете найти этот вопрос полезно относительно листинга содержимого почтовых файлов:

How to list the contents of a .zip folder in c#?

(Обратите внимание, вы могли бы потенциально нить для улучшения производительности, просто не охватывают многие темы)

0

Возможно, вы можете использовать пакет кода Windows API (поставляется с источником). Функция диалога «Общие файлы» предоставляет гораздо больше функциональности диалоговых окон файлов, чем версии в Winforms/WPF.

http://code.msdn.microsoft.com/WindowsAPICodePack

Смежные вопросы