Выбор папки с .NET 3.5 - PullRequest
       15

Выбор папки с .NET 3.5

26 голосов
/ 05 сентября 2008

В приложении C # .NET 3.5 (смесь WinForms и WPF) я хочу позволить пользователю выбрать папку для импорта множества данных. На данный момент он использует System.Windows.Forms.FolderBrowserDialog, но это немного неубедительно. Главным образом потому, что вы не можете ввести путь к нему (поэтому вам нужно сопоставить сетевой диск, а не набирать UNC-путь).

Я бы хотел что-то более похожее на System.Windows.Forms.OpenFileDialog, но для папок вместо файлов.

Что я могу использовать вместо этого? Хорошо подходит решение WinForms или WPF, но я бы предпочел не вставлять PInvoke в Windows API, если я могу этого избежать.

Ответы [ 4 ]

36 голосов
/ 09 марта 2009

Не создавай это сам! Это было сделано. Вы можете использовать FolderBrowserDialogEx - повторно используемая производная от встроенного FolderBrowserDialog. Этот позволяет вам ввести путь, даже путь UNC. Вы также можете просматривать компьютеры или принтеры с ним. Работает так же, как встроенный FBD, но ... лучше.

Полный исходный код. Свободно. Лицензия MS-Public.

FolderBrowserDialogEx

Код для его использования:

var dlg1 = new Ionic.Utils.FolderBrowserDialogEx();
dlg1.Description = "Select a folder to extract to:";
dlg1.ShowNewFolderButton = true;
dlg1.ShowEditBox = true;
//dlg1.NewStyle = false;
dlg1.SelectedPath = txtExtractDirectory.Text;
dlg1.ShowFullPathInEditBox = true;
dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer;

// Show the FolderBrowserDialog.
DialogResult result = dlg1.ShowDialog();
if (result == DialogResult.OK)
{
    txtExtractDirectory.Text = dlg1.SelectedPath;
}
1 голос
/ 05 сентября 2008

К сожалению, нет никаких диалогов, кроме FolderBrowserDialog для выбора папки. Вам нужно создать этот диалог самостоятельно или использовать PInvoke.

0 голосов
/ 09 июня 2013

После нескольких часов поиска аналогичного решения я нашел этот ответ от leetNightShade до рабочего решения .

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

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

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

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

0 голосов
/ 05 сентября 2008

Пока, исходя из отсутствия ответов на мой идентичный вопрос , я бы предположил, что ответ заключается в том, чтобы развернуть свой собственный диалог с нуля.

Я видел кое-что о подклассах общих диалогов из VB6, и я думаю, что это может быть частью решения, но я никогда не видел ничего об изменении того, что диалог думает, что выбирает. Это было бы возможно через .NET через PInvoke и некоторые другие приемы, но я еще не видел код, который это делает.

Я знаю, это возможно, и это не зависит от Vista, потому что Visual Studio делает это с VS 2003.

Здесь надеются, что кто-нибудь ответит или на вас, или на меня!

...