wake-up-neo.net

Wie benutze ich OpenFileDialog, um einen Ordner auszuwählen?

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?

207
Yun

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

331
Ionică Bizău

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);
}

HINWEIS: Das offizielle Microsoft Nuget-Paket ist ab sofort verfügbar

  • Microsoft.WindowsAPICodePack-Core
  • Microsoft.WindowsAPICodePack-Shell

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
146
Joe

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
    }
}
21
Andrew

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. 

 C# Folder selection dialog

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);
    // ...
}
15

Klingt für mich wie Sie gerade nach dem FolderBrowserDialog .

14
Simon Whitehead

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:

1
Ben Keene

Schauen Sie sich die Bibliotheken - Ookii Dialogs an, die eine Implementierung eines Ordnerbrowserdialogs für Windows Forms bzw. WPF enthalten.

 enter image description here

Ookii.Dialogs.WinForms

https://github.com/caioproiete/ookii-dialogs-winforms


Ookii.Dialogs.Wpf

https://github.com/caioproiete/ookii-dialogs-wpf

0
Caio Proiete