Jak używać OpenFileDialog
do wybierania folderów?
Zamierzałem użyć następującego projektu: https://github.com/scottwis/OpenFileOrFolderDialog
Jednak napotkałem jeden problem. Wykorzystuje GetOpenFileName
funkcję i OPENFILENAME
strukturę. I OPENFILENAME
ma członka o nazwie templateID
. Jest to identyfikator szablonu okna dialogowego. Projekt zawiera również res1.rc
plik i szablon inicjujący okno dialogowe. Ale nie mogłem wymyślić, jak załączyć ten plik do mojego projektu w języku C #.
Czy istnieje lepszy sposób na użycie OpenFileDialog
folderów do wybrania folderów?
c#
.net
dialog
openfiledialog
Yun
źródło
źródło
ValidateNames
iCheckFileExists
oba są ustawione na false iFileName
otrzymuje próbną wartość wskazującą, że katalog jest wybrany. Mówię hack, ponieważ jest mylące dla użytkowników na temat wyboru folderu. Zobacz Wybierz plik lub folder z tego samego okna dialogowegoValidateNames
iCheckFileExists
abyfalse
nie działał, musiałem ustawić je0
(lub dowiedzieć się PowerShell lepiej)Odpowiedzi:
Zasadniczo potrzebujesz
FolderBrowserDialog
klasy:Przykład:
Jeśli pracujesz w WPF , musisz dodać odniesienie do
System.Windows.Forms
.musisz także dodać
using System.IO
doDirectory
zajęćźródło
new CommonOpenFileDialog { IsFolderPicker = true }
.Uwaga dla przyszłych użytkowników, którzy chcieliby uniknąć używania
FolderBrowserDialog
, Microsoft wydała kiedyś interfejs API o nazwie WindowsAPICodePack, który miał pomocne okno dialogowe o nazwieCommonOpenFileDialog
, które można ustawić wIsFolderPicker
tryb. Interfejs API jest dostępny w firmie Microsoft jako pakiet NuGet .To wszystko, czego potrzebowałem, aby zainstalować i korzystać z
CommonOpenFileDialog
. (NuGet obsługiwał zależności)Dla linii dołączania:
Stosowanie:
źródło
Microsoft.WindowsAPICodePack.Shell
pakiet za pośrednictwem NuGet, zanim będziesz mógł z niego korzystaćCommonOpenFileDialog
.FolderBrowserDialog
użytkowników: wielokrotne korzystanie z niej może powodować problemy. TakCommonOpenFileDialog
jest lepiejWindowsAPICodePack-Shell
Istnieje hackish rozwiązanie, w
OpenFileDialog
którym gdzieValidateNames
iCheckFileExists
oba są ustawione na fałsz iFileName
otrzymuje próbną wartość wskazującą, że wybrany jest katalog.Mówię hack, ponieważ jest mylące dla użytkowników na temat wyboru folderu. Muszą znajdować się w wybranym folderze, a następnie po prostu naciśnij Otwórz, podczas gdy nazwa pliku mówi „Wybór folderu”.
Jest to oparte na pliku Select lub folderze z tego samego okna dialogowego autorstwa Denisa Stankovskiego.
źródło
Folder Selection.
zostaną umieszczone na końcu nazwy pliku w następujący sposób:C:\Folder Selection.
Myślę, że zawsze można usunąć te znaki z ciągu. Nadal wygląda lepiej niż FolderBrowserDialogOpen
przycisk okna dialogowego nie działa zgodnie z oczekiwaniami! powoduje to powrót do poprzedniego folderu! ale działa to po dwukrotnym kliknięciu folderów, aby je zaznaczyć lub wybrać niektóre pliki w każdym folderze (jeśli jest jakiś plik, który można wybrać)Dziwne, że tyle odpowiedzi / głosów, ale nikt nie dodaje następującego kodu jako odpowiedzi:
źródło
Brzmi dla mnie tak, jakbyś zaraz po FolderBrowserDialog .
źródło
Oto inne rozwiązanie, które ma wszystkie źródła dostępne w jednym, prostym pliku ZIP.
Przedstawia OpenFileDialog z dodatkowymi flagami systemu Windows, dzięki czemu działa jak okno dialogowe Wybór folderu systemu Windows 7+.
Według strony internetowej jest to domena publiczna: „Nie ma licencji jako takiej, którą możesz pobrać i zrobić z tym, co chcesz”.
Linki do Archive.org:
źródło
Spójrz na biblioteki Ookii Dialogs, które mają implementację okna dialogowego przeglądarki folderów odpowiednio dla Windows Forms i WPF.
źródło
powinien to być najbardziej oczywisty i bezpośredni sposób
źródło
FolderBrowserDialog
był już tutaj oferowany wiele razy i jest złą odpowiedzią. Jest to przestarzały i bardzo nieprzyjazny interfejs użytkownika. UżywaSHBrowseForFolder
pod spodem, a nawet dokumenty mówią: „W systemie Windows Vista lub nowszym zaleca się korzystanieIFileDialog
z tejFOS_PICKFOLDERS
opcji zamiast zSHBrowseForFolder
funkcją. Używa ona okna dialogowego Otwórz pliki w trybie wyboru folderów i jest preferowaną implementacją”.