2008-09-05 3 views
26

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

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

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

ответ

36

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

Полный исходный код. Свободно. MS-публичная лицензия.

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; 
} 
+30

Ahhhh! Ярко-розовый! Мои глаза ... мои бедные глаза ... – dthrasher 2009-09-22 17:27:32

1

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

0

До сих пор, исходя из отсутствия ответов на my identical question, я бы предположил, что ответ - это свернуть собственный диалог с нуля.

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

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

Вот надеюсь кто-то отвечает на ваш или мой!

0

После нескольких часов поисков подобного решения я нашел this answer по leetNightShade к a working solution.

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

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

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

Скачать код here.