Выбор папки с .NET 3.5
В приложении С#.NET 3.5 (сочетание WinForms и WPF) я хочу, чтобы пользователь выбрал папку для импорта нагрузки данных. На данный момент он использует System.Windows.Forms.FolderBrowserDialog
, но это немного хромает. В основном потому, что вы не можете ввести путь в него (так что вам нужно сопоставить сетевой диск, а не вводить UNC-путь).
Мне нравится нечто большее, чем System.Windows.Forms.OpenFileDialog
, но для папок вместо файлов.
Что я могу использовать вместо этого? Решение WinForms или WPF прекрасно, но я бы предпочел не использовать PInvoke в Windows API, если я могу его избежать.
Ответы
Ответ 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 или более старых систем.
- Автор предоставляет разрешение на использование кода для любых целей, которые вы сочтете подходящими.
Нет лицензии, так как вы свободны принимать и делать с кодом, что хотите.
Загрузите код здесь.