Как использовать OpenFileDialog
для выбора папок?
Я собирался использовать следующий проект: https://github.com/scottwis/OpenFileOrFolderDialog
Однако я столкнулся с одной проблемой. Он использует GetOpenFileName
функцию и OPENFILENAME
структуру. И OPENFILENAME
назвал члена templateID
. Это идентификатор шаблона диалога. И проект содержит res1.rc
файл и шаблонный диалог init тоже. Но я не мог понять, как прикрепить этот файл к моему проекту на C #.
Есть ли лучший способ использовать OpenFileDialog
для выбора папки?
ValidateNames
иCheckFileExists
оба имеют значение false, иFileName
ему дается фиктивное значение, чтобы указать, что каталог выбран. Я говорю хак, потому что это сбивает с толку пользователей о том, как выбрать папку. См. Выбор файла или папки из того же диалогового окнаValidateNames
иCheckFileExists
чтобыfalse
он не работал, мне нужно было установить их0
(или лучше изучить powershell)Ответы:
В основном вам нужен
FolderBrowserDialog
класс:Пример:
Если вы работаете в WPF, вы должны добавить ссылку на
System.Windows.Forms
.Вы также должны добавить
using System.IO
дляDirectory
классаисточник
new CommonOpenFileDialog { IsFolderPicker = true }
.В качестве заметки для будущих пользователей, которые хотели бы отказаться от использования
FolderBrowserDialog
, Microsoft однажды выпустила API под названием WindowsAPICodePack, в котором есть полезный диалогCommonOpenFileDialog
, который можно установить вIsFolderPicker
режим. API доступен от Microsoft в виде пакета NuGet .Это все, что мне нужно для установки и использования
CommonOpenFileDialog
. (NuGet обработал зависимости)Для строки включения:
Использование:
источник
Microsoft.WindowsAPICodePack.Shell
пакет через NuGet, прежде чем вы сможете использовать этоCommonOpenFileDialog
.FolderBrowserDialog
пользователей: одновременное использование нескольких экземпляров может создать проблемы. ЭтоCommonOpenFileDialog
лучшеWindowsAPICodePack-Shell
Существует хакерское решение, использующее
OpenFileDialog
гдеValidateNames
иCheckFileExists
оба имеют значение false, иFileName
ему дается фиктивное значение, чтобы указать, что каталог выбран.Я говорю хак, потому что это сбивает с толку пользователей о том, как выбрать папку. Они должны находиться в нужной папке, а затем просто нажать «Открыть», а имя файла говорит «Выбор папки».
Это основано на Выбрать файл или папку из того же диалога Дениса Станковского.
источник
Folder Selection.
она будет добавлена в конец имени файла, например, так:C:\Folder Selection.
я думаю, вы всегда можете удалить эти символы из строки. По-прежнему выглядит лучше, чем FolderBrowserDialogOpen
кнопка диалога не работает должным образом! это потому что вы возвращаетесь в предыдущую папку! но это работает, когда вы просто дважды щелкаете папки, чтобы выбрать их или выбрать несколько файлов внутри каждой папки (если есть какой-либо файл, который вы можете выбрать)Странно, что столько ответов / голосов, но никто не добавляет следующий код в качестве ответа:
источник
Звучит так, будто вы только после FolderBrowserDialog .
источник
Вот еще одно решение, в котором весь источник доступен в одном простом ZIP-файле.
Он представляет OpenFileDialog с дополнительными флагами Windows, что делает его похожим на диалог выбора папок Windows 7+.
На сайте это общественное достояние: «Там нет лицензии как таковой, так как вы можете взять и делать с кодом то, что вы будете».
Ссылки на Archive.org:
источник
Взгляните на библиотеки Ookii Dialogs, в которых реализован диалог браузера папок для Windows Forms и WPF соответственно.
источник
это должен быть самый очевидный и прямой путь
источник
FolderBrowserDialog
уже предлагался здесь несколько раз, и это неправильный ответ. Это устаревший и не очень удобный интерфейс. Он используетSHBrowseForFolder
нижнюю часть и даже состояние документов: «Для Windows Vista или более поздней версии рекомендуется использоватьIFileDialog
с этойFOS_PICKFOLDERS
опцией, а не сSHBrowseForFolder
функцией. Это использует диалог« Открыть файлы »в режиме выбора папок и является предпочтительной реализацией».