Используя OpenFileDialog для каталога, а не FolderBrowserDialog
Я хочу иметь браузер папки в своем приложении, но Я не хочу использовать FolderBrowserDialog. (По нескольким причинам, например, больно использовать)
Я хочу использовать стандартный OpenFileDialog, но изменен для каталогов.
В качестве примера μTorrent имеет приятную реализацию (Предпочтения/Каталоги/Положите новые загрузки в:). Стандартный диалог Open File Dialog позволяет пользователю:
- вставить полные пути в текстовое поле внизу
- используйте панель "Избранные ссылки" в Vista.
- использовать поиск в Vistali >
- авто запомнить последний каталог
- подробнее...
Кто-нибудь знает, как это реализовать? В С#.
Ответы
Ответ 1
Я не уверен в uTorrent, но это звучит как новая Vista IFileDialog с установленной опцией FOS_PICKFOLDERS. Общий код С# для него будет выглядеть примерно так:
var frm = (IFileDialog)(new FileOpenDialogRCW());
uint options;
frm.GetOptions(out options);
options |= FOS_PICKFOLDERS;
frm.SetOptions(options);
if (frm.Show(owner.Handle) == S_OK) {
IShellItem shellItem;
frm.GetResult(out shellItem);
IntPtr pszString;
shellItem.GetDisplayName(SIGDN_FILESYSPATH, out pszString);
this.Folder = Marshal.PtrToStringAuto(pszString);
}
Полный код можно найти здесь.
Ответ 2
См. этот ответ leetNightShade для рабочего решения.
Есть три вещи, которые, я считаю, делают это решение намного лучше, чем все остальные.
- Прост в использовании.
Это требует, чтобы вы включили в свой проект два файла (которые могут быть объединены в один момент).
- Возвращается к стандартным FolderBrowserDialog при использовании на XP или более старых систем.
- Автор предоставляет разрешение на использование кода для любых целей, которые вы сочтете подходящими.
Нет лицензии, так как вы свободны принимать и делать с кодом, что хотите.
Загрузите код здесь.
Ответ 3
WindowsAPICodePack
var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog();
dlg.IsFolderPicker = true;