использование OpenFileDialog для каталога, а не FolderBrowserDialog - PullRequest
13 голосов
/ 01 марта 2009

Я хочу, чтобы в моем приложении был браузер папок, но Я не хочу использовать FolderBrowserDialog. (По нескольким причинам, например, это больно использовать)

Я хочу использовать стандартный OpenFileDialog, но модифицированный для каталогов.

В качестве примера, µTorrent имеет хорошую реализацию этого (Предпочтения / Каталоги / Поместите новые загрузки в :). Стандартный диалог открытия файла позволяет пользователю:

  • вставить полные пути в текстовое поле внизу
  • использовать панель "Избранные ссылки" в Vista
  • использовать Поиск в Vista
  • авто запомнить последний каталог
  • подробнее ...

Кто-нибудь знает, как это реализовать? В C #.

Ответы [ 3 ]

5 голосов
/ 04 января 2012

Я не уверен насчет uTorrent, но это похоже на новую Vista * IFileDialog с установленным параметром FOS_PICKFOLDERS. Общий код C # для него будет выглядеть примерно так:

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);
}

Полный код можно найти здесь .

0 голосов
/ 16 июня 2017

WindowsAPICodePack

var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog();
dlg.IsFolderPicker = true;
0 голосов
/ 09 июня 2013

См. этот ответ от leetNightShade для рабочего решения.

Я верю, что есть три вещи, которые делают это решение намного лучше, чем все остальные.

  1. Прост в использовании. Требуется только включить два файла (которые в любом случае можно объединить в один) в вашем проекте.
  2. Возвращается к стандартному FolderBrowserDialog при использовании на XP или более старых системах.
  3. Автор предоставляет разрешение на использование кода в любых целях, которые вы считаете нужными.

    Нет такой лицензии, как таковая, которую вы можете взять и сделать с кодом так, как хотите.

Скачать код здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...