Wybór folderu with.NET 3, 5

[2]} w aplikacji C#. Net 3.5 (mieszanka WinForms i WPF) chcę pozwolić użytkownikowi wybrać folder do zaimportowania ładunku danych z. W tej chwili używa System.Windows.Forms.FolderBrowserDialog, ale to trochę lamerskie. Głównie dlatego, że nie możesz wpisać do niego ścieżki (więc musisz zmapować dysk sieciowy, zamiast wpisywać ścieżkę UNC).

Chciałbym coś bardziej jak System.Windows.Forms.OpenFileDialog, ale dla folderów zamiast plików.

Czego mogę użyć zamiast tego? Rozwiązanie WinForms lub WPF jest w porządku, ale wolałbym nie przypinać do Windows API, jeśli mogę tego uniknąć.

Author: Santosh Panda, 2008-09-05

4 answers

Nie twórz tego sam! Już po wszystkim. Możesz użyć FolderBrowserDialogEx - wielokrotnego użytku pochodna wbudowanego FolderBrowserDialog. Ten pozwala na wpisanie ścieżki, nawet ścieżki UNC. Możesz także przeglądać za pomocą niego komputery lub drukarki. Działa tak samo jak wbudowany FBD, ale ... lepiej.

Pełny kod źródłowy. Za darmo. MS-Licencja Publiczna.

FolderBrowserDialogEx

Kod do użycia:

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;
}
 36
Author: Cheeso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 12:25:18

Niestety nie ma innych okien dialogowych niż FolderBrowserDialog do wyboru folderów. Musisz utworzyć to okno samodzielnie lub użyć PInvoke.

 1
Author: aku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-03 12:08:15

Na razie, bazując na braku odpowiedzi na moje identyczne pytanie , zakładam, że odpowiedzią jest zrobienie własnego okna dialogowego od podstaw.

Widziałem tu i ówdzie rzeczy o podklasowaniu wspólnych okien dialogowych z VB6 i myślę, że może to być część rozwiązania, ale nigdy nie widziałem nic o modyfikowaniu tego, co okno myśli, że wybiera. Byłoby to możliwe poprzez. net poprzez PInvoke i kilka innych sztuczek, ale jeszcze nie widziałem kodu, który to robi.

I wiem jest to możliwe i nie jest specyficzne dla Visty, ponieważ Visual Studio robi to od 2003 roku.

Mam nadzieję, że ktoś odpowie na twoje lub moje!

 0
Author: OwenP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:30

Po godzinach szukania podobnego rozwiązania znalazłem tę odpowiedź przez leetNightShade na rozwiązanie robocze.

Są trzy rzeczy, które moim zdaniem sprawiają, że to rozwiązanie jest znacznie lepsze niż wszystkie inne.

  1. Jest prosty w użyciu. Wymaga tylko dołączenia do projektu dwóch plików (które i tak można połączyć w jeden).
  2. wraca do standardowegoFolderBrowserDialog gdy jest używany na XP lub starszych systemy.
  3. autor udziela zgody na wykorzystanie kodu w dowolnym celu, który uznasz za odpowiedni.

    Nie ma licencji jako takiej, jak możesz wziąć i zrobić z kodem, co chcesz.

Pobierz kod tutaj .

 0
Author: Alex Essilfie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:47