Wie verwende OpenFileDialog
ich Ordner?
Ich wollte das folgende Projekt verwenden: https://github.com/scottwis/OpenFileOrFolderDialog
Ich hatte jedoch ein Problem. Es nutzt die GetOpenFileName
Funktion und OPENFILENAME
Struktur. Und OPENFILENAME
hat das Mitglied benannt templateID
. Es ist die Kennung für die Dialogvorlage. Das Projekt enthält auch die res1.rc
Datei und den Initial-Dialog. Ich konnte jedoch nicht herausfinden, wie ich diese Datei an mein C # -Projekt anhängen kann.
Gibt es eine bessere Möglichkeit OpenFileDialog
, Ordner auszuwählen?
c#
.net
dialog
openfiledialog
Yun
quelle
quelle
ValidateNames
undCheckFileExists
beide auf falsch sind undFileName
ist ein Mock - Wert gegeben , um anzuzeigen , dass ein Verzeichnis ausgewählt ist. Ich sage Hack, weil es für Benutzer verwirrend ist, wie man einen Ordner auswählt. Siehe Datei oder Ordner aus demselben Dialogfeld auswählenValidateNames
undCheckFileExists
zufalse
funktionierte nicht, ich brauchte sie zu setzen0
(oder lernen Powershell besser)Antworten:
Grundsätzlich brauchen Sie die
FolderBrowserDialog
Klasse:Beispiel:
Wenn Sie in WPF arbeiten , müssen Sie den Verweis auf hinzufügen
System.Windows.Forms
.Sie müssen auch
using System.IO
für dieDirectory
Klasse hinzufügenquelle
new CommonOpenFileDialog { IsFolderPicker = true }
.Als Hinweis für zukünftige Benutzer, die die Verwendung vermeiden möchten
FolderBrowserDialog
, hat Microsoft einmal eine API namens WindowsAPICodePack veröffentlicht, die einen hilfreichen Dialog namensCommonOpenFileDialog
hat, der in einenIsFolderPicker
Modus versetzt werden kann. Die API ist von Microsoft als NuGet-Paket erhältlich .Dies ist alles, was ich brauchte, um das zu installieren und zu verwenden
CommonOpenFileDialog
. (NuGet hat die Abhängigkeiten behandelt)Für die Include-Zeile:
Verwendungszweck:
quelle
Microsoft.WindowsAPICodePack.Shell
Paket über NuGet installieren müssen, bevor Sie es verwenden könnenCommonOpenFileDialog
.FolderBrowserDialog
Benutzer: Die gleichzeitige Verwendung mehrerer Instanzen kann zu Problemen führen. DasCommonOpenFileDialog
ist besser.WindowsAPICodePack-Shell
Es gibt eine hackige Lösung, bei der
OpenFileDialog
whereValidateNames
undCheckFileExists
beide auf false und gesetzt sindFileName
die einen Scheinwert erhalten, um anzuzeigen, dass ein Verzeichnis ausgewählt ist.Ich sage Hack, weil es für Benutzer verwirrend ist, wie man einen Ordner auswählt. Sie müssen sich im gewünschten Ordner befinden und dann einfach auf Öffnen klicken, während der Dateiname "Ordnerauswahl" lautet.
Dies basiert auf Datei oder Ordner im selben Dialogfeld von Denis Stankovski auswählen.
quelle
Folder Selection.
folgt am Ende des Dateinamens angeheftet wird:C:\Folder Selection.
Ich denke, Sie könnten diese Zeichen immer aus der Zeichenfolge entfernen. Sieht immer noch besser aus als der FolderBrowserDialogOpen
drückt, funktioniert die Hauptschaltfläche des Dialogfelds nicht wie erwartet! es führt dazu, dass Sie zurück zum vorherigen Ordner springen! aber es funktioniert, wenn Sie nur auf Ordner doppelklicken, um sie auszuwählen, oder einige Dateien in jedem Ordner auswählen (wenn es eine Datei gibt, die Sie auswählen können)Seltsam, dass so viele Antworten / Stimmen, aber niemand den folgenden Code als Antwort hinzufügt:
quelle
Klingt für mich so, als wären Sie direkt hinter dem FolderBrowserDialog .
quelle
Hier ist eine andere Lösung, bei der alle Quellen in einer einzigen, einfachen ZIP-Datei verfügbar sind.
Der OpenFileDialog wird mit zusätzlichen Windows-Flags dargestellt, sodass er wie das Windows 7+ -Dialogfeld zur Ordnerauswahl funktioniert.
Laut der Website ist es gemeinfrei: "Es gibt keine Lizenz als solche, die Sie frei nehmen und mit dem Code machen können, was Sie wollen."
Archive.org Links:
quelle
Schauen Sie sich die Ookii Dialogs- Bibliotheken an, in denen ein Ordner-Browser-Dialog für Windows Forms bzw. WPF implementiert ist.
quelle
Dies sollte der naheliegendste und direkteste Weg sein
quelle
FolderBrowserDialog
wurde hier schon mehrfach angeboten und ist die falsche Antwort. Es ist eine veraltete und sehr nicht benutzerfreundliche Oberfläche. Es wirdSHBrowseForFolder
darunter verwendet und sogar in den Dokumenten heißt es: "Für Windows Vista oder höher wird empfohlen, dass SieIFileDialog
dieFOS_PICKFOLDERS
Option anstelle derSHBrowseForFolder
Funktion verwenden. Dies verwendet das Dialogfeld" Dateien öffnen "im Modus" Ordner auswählen "und ist die bevorzugte Implementierung."