OpenFileDialogEx, описанный в этой статье CodeProject , является расширением стандартного OpenFileDialog. Основное намерение этого расширения состоит в том, чтобы изменить отображение диалогового окна, но есть несколько дополнительных наворотов. Например, OFDEx добавляет несколько событий: «Файл изменен», «Папка изменена» и т. Д.
Кто-то указал, что уведомление CDN_INCLUDEITEM, похоже, удовлетворит желание фильтровать список файлов, отображаемых в диалоговом окне. Кажется, что это так, но это не так. CDN_INCLUDEITEM не делает то, что вы думаете или хотите.
Согласно этой статье MSDN Mag ,
Если вы создаете диалог с
OFN_ENABLEINCLUDENOTIFY, Windows отправляет
Ваша подключаемая процедура CDN_INCLUDEITEM
уведомление о каждом добавляемом элементе
открытый список. Если вы вернете ЛОЖЬ,
Windows исключает элемент. проблема
Windows не уведомляет вас о
обычные файлы, только псевдообъекты
как расширения пространства имен. Когда вы
прочитайте документацию через
увеличительное стекло, печать
совершенно ясно: «Диалоговое окно
всегда включает в себя предметы, которые имеют оба
SFGAO_FILESYSTEM и
Атрибуты SFGAO_FILESYSANCESTOR,
независимо от значения, возвращаемого
CDN_INCLUDEITEM. "Видимо
Redmondtonians добавил CDN_INCLUDEITEM
для своих собственных целей, которые не
включить фильтрацию обычных имен файлов.
Другими словами, в ответ на CDN_INCLUDEITEM вы не можете вернуть FALSE для обычных файлов, чтобы исключить их из диалогового окна. В отличие от документа, в котором говорится, что ответ от CDN_INCLUDEITEM игнорируется для обычных файлов, по моему опыту, CDN_INCLUDEITEM даже не отправляется для обычных файлов, по крайней мере, на моем компьютере с Vista.
Так возможно ли динамическое исключение файлов? Ну да, в C ++; В ответ на сообщение CDN_FOLDERCHANGED вы можете получить и установить содержимое CListCtrl, который содержит файлы. Я не понял, как установить этот список в C #.