Wie verwende ich OpenFileDialog
, um Ordner auszuwählen?
Ich wollte folgendes Projekt verwenden: https://github.com/scottwis/OpenFileOrFolderDialog
Ich hatte jedoch ein Problem. Es verwendet die Funktion GetOpenFileName
und die Struktur OPENFILENAME
. Und OPENFILENAME
hat das Mitglied templateID
. Es ist der Bezeichner für die Dialogvorlage. Und das Projekt enthält auch die res1.rc
-Datei und die dialogorientierte Dialoginitialisierung. Ich konnte jedoch nicht herausfinden, wie ich diese Datei an mein C # -Projekt anhängen kann.
Gibt es eine bessere Möglichkeit, eine OpenFileDialog
zum Auswählen von Ordnern zu verwenden?
Grundsätzlich benötigen Sie die Klasse FolderBrowserDialog
:
Fordert den Benutzer auf, einen Ordner auszuwählen. Diese Klasse kann nicht vererbt werden.
Beispiel:
using(var fbd = new FolderBrowserDialog())
{
DialogResult result = fbd.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
{
string[] files = Directory.GetFiles(fbd.SelectedPath);
System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
}
}
Wenn Sie in WPF arbeiten, müssen Sie die Referenz zu System.Windows.Forms
hinzufügen.
sie müssen auch using System.IO
für die Directory
-Klasse hinzufügen
Als Hinweis für zukünftige Benutzer, die die Verwendung von FolderBrowserDialog
vermeiden möchten, hat Microsoft eine API namens WindowsAPICodePack veröffentlicht, die über einen hilfreichen Dialog namens CommonOpenFileDialog
verfügte, der in einen IsFolderPicker
-Modus gesetzt werden konnte.
Wenn Sie Zugriff auf Nuget-Pakete haben, ist es in den öffentlichen Listen weiterhin als WindowsAPICodePack
verfügbar.
Für die Include-Zeile:
using Microsoft.WindowsAPICodePack.Dialogs;
Verwendungszweck:
CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.InitialDirectory = "C:\\Users";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
MessageBox.Show("You selected: " + dialog.FileName);
}
jedes Paket stammt von Microsoft und wird beide installieren.
Projekt-URL: http://code.msdn.Microsoft.com/WindowsAPICodePack .
Der NuGet-Benutzer aybe hat eine Reihe inoffizieller Pakete hochgeladen. Die meisten Leute scheinen ihm als verlässliche Quelle zu vertrauen.
Dies ist alles, was ich für die Installation von CommonOpenFileDialog
installieren musste. (Nuget behandelte die Abhängigkeiten)
Install-Package WindowsAPICodePack-Shell
Seltsam, dass so viele Antworten/Stimmen, aber niemand fügt den folgenden Code als Antwort hinzu:
using (var fldrDlg = new FolderBrowserDialog())
{
//fldrDlg.Filter = "Png Files (*.png)|*.png";
//fldrDlg.Filter = "Excel Files (*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv"
if (fldrDlg.ShowDialog() == DialogResult.OK)
{
//fldrDlg.SelectedPath -- your result
}
}
Es gibt eine hackish Lösung, die OpenFileDialog
verwendet, wobei ValidateNames
und CheckFileExists
beide auf false gesetzt sind und FileName
ein Scheinwert gegeben wird, 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 drücken, während der Dateiname "Ordnerauswahl" sagt.
Dies basiert auf Datei oder Ordner aus demselben Dialog auswählen von Denis Stankovski.
OpenFileDialog folderBrowser = new OpenFileDialog();
// Set validate names and check file exists to false otherwise windows will
// not let you select "Folder Selection."
folderBrowser.ValidateNames = false;
folderBrowser.CheckFileExists = false;
folderBrowser.CheckPathExists = true;
// Always default to Folder Selection.
folderBrowser.FileName = "Folder Selection.";
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
string folderPath = Path.GetDirectoryName(folderBrowser.FileName);
// ...
}
Klingt für mich wie Sie gerade nach dem FolderBrowserDialog .
Hier ist eine andere Lösung, bei der alle Quellen in einer einzelnen, einfachen Zip-Datei verfügbar sind.
Es zeigt dem OpenFileDialog zusätzliche Fensterflags, die es wie das Windows 7+-Dialogfeld "Ordnerauswahl" funktionieren lassen.
Pro Website ist es gemeinfrei: "Es gibt keine Lizenz als solche, die Sie frei nehmen können und mit dem Code tun, was Sie wollen."
Archive.org-Links:
Schauen Sie sich die Bibliotheken - Ookii Dialogs an, die eine Implementierung eines Ordnerbrowserdialogs für Windows Forms bzw. WPF enthalten.
Ookii.Dialogs.WinForms
Ookii.Dialogs.Wpf