Я бы не отмахнулся от сложности OpenFileDialog. Это не так легко построить тот, который действительно работает. Когда вы создаете свой собственный, это не «нормальный» диалог, и в результате он сбивает с толку пользователей. Это правда, даже если вы делаете это хорошо, что сложно. Поэтому я бы посоветовал вам заняться расширением того, что уже есть, а не писать что-то новое.
Проверьте в этой статье для расширения OFD , которое может / может быть настроено, чтобы сделать именно то, что вы хотите. Существует обратный вызов, который вы пишете в C #, который отвечает на выбор пути.
Похожие: FolderBrowserDialogEx - аналогичное расширение для FolderBrowserDialog. Несмотря на название, вы можете настроить его для поиска файлов, а также папок. Существует обратный вызов, который вызывается, когда что-то (папка, файл) выбрано, и в этом обратном вызове вы можете делать то, что вам нужно. Например, загляните внутрь файлов в папке и заполните список файлов для отображения только этими файлами.
Другой вариант, который вы могли бы рассмотреть - это диалоговая библиотека от Ookii . Это реализация OpenFileDialog с открытым исходным кодом, и она включает в себя оболочки COM для всех новых диалоговых компонентов в Vista. Используя эту библиотеку, вы можете открыть Vista OpenFileDialog и получать события из интерфейса IFileDialogEvents в коде C #. Одним из таких событий является OnFolderChange (). Внутри обработчика вы можете вызвать IFolder.GetFolder (), который даст вам IShellItem , который даст вам папку, на которую пользователь изменяет. Следующим шагом будет детализация и потенциальная фильтрация набора файлов, и это упражнение я оставлю читателю ...