Подтвердить что ты не робот

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

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

Мне нравится нечто большее, чем System.Windows.Forms.OpenFileDialog, но для папок вместо файлов.

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

4b9b3361

Ответ 1

Не создавайте его самостоятельно! Это было сделано. Вы можете использовать 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;
}

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

    Нет лицензии, так как вы свободны принимать и делать с кодом, что хотите.

Загрузите код здесь.