Comment utiliser OpenFileDialog
pour sélectionner des dossiers?
J'allais utiliser le projet suivant: https://github.com/scottwis/OpenFileOrFolderDialog
Cependant, j'ai rencontré un problème. Il utilise la fonction GetOpenFileName
et la structure OPENFILENAME
. Et OPENFILENAME
a le membre nommé templateID
. C'est l'identifiant du modèle de dialogue. Et le projet contient également le fichier res1.rc
et l'init de dialogue basé sur un modèle. Mais je ne savais pas comment joindre ce fichier à mon projet C #.
Existe-t-il un meilleur moyen d’utiliser une variable OpenFileDialog
pour sélectionner des dossiers?
En gros, vous avez besoin de la classe FolderBrowserDialog
:
Invite l'utilisateur à sélectionner un dossier. Cette classe ne peut pas être héritée.
Exemple:
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");
}
}
Si vous travaillez dans WPF, vous devez ajouter la référence à System.Windows.Forms
.
vous devez également ajouter using System.IO
pour la classe Directory
À l’intention des futurs utilisateurs souhaitant éviter d’utiliser FolderBrowserDialog
, Microsoft publiait une API appelée WindowsAPICodePack, dotée d’une boîte de dialogue utile appelée CommonOpenFileDialog
, pouvant être définie en mode IsFolderPicker
.
Si vous avez accès aux packages de nuget, il est toujours disponible dans les listes publiques sous la forme WindowsAPICodePack
Pour la ligne d'inclusion:
using Microsoft.WindowsAPICodePack.Dialogs;
Usage:
CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.InitialDirectory = "C:\\Users";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
MessageBox.Show("You selected: " + dialog.FileName);
}
chaque paquet est par Microsoft et installera les deux.
URL du projet: http://code.msdn.Microsoft.com/WindowsAPICodePack .
L'utilisateur NuGet aybe a téléchargé une série de paquets non officiels. La plupart des gens semblent lui faire confiance en tant que source fiable.
C’est tout ce que j’avais besoin d’installer pour utiliser la CommonOpenFileDialog
. (Nuget a géré les dépendances)
Install-Package WindowsAPICodePack-Shell
Étrange que tant de réponses/votes, mais personne n'ajoute le code suivant comme réponse:
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
}
}
Il existe une solution bidon utilisant OpenFileDialog
où ValidateNames
et CheckFileExists
sont tous deux définis sur false et que FileName
reçoit une valeur fictive pour indiquer qu'un répertoire est sélectionné.
Je dis hack parce que les utilisateurs ne savent pas comment sélectionner un dossier. Ils doivent se trouver dans le dossier souhaité, puis appuyer sur Ouvrir pendant que le nom du fichier indique "Sélection du dossier".
Ceci est basé sur Sélectionnez un fichier ou un dossier dans la même boîte de dialogue par 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);
// ...
}
Il me semble que vous êtes juste après le FolderBrowserDialog .
Voici une autre solution, qui a toutes les sources disponibles dans un seul fichier Zip simple.
Il présente OpenFileDialog avec des indicateurs Windows supplémentaires lui permettant de fonctionner comme dans la boîte de dialogue Sélection de dossiers de Windows 7+.
Selon le site Web, il est du domaine public: "Il n’ya pas de licence en tant que telle, vous êtes libre de prendre et de faire avec le code ce que vous voulez."
Liens Archive.org:
Examinez les bibliothèques Ookii Dialogs qui implémentent respectivement la boîte de dialogue du navigateur de dossiers pour Windows Forms et WPF.
Ookii.Dialogs.WinForms
Ookii.Dialogs.Wpf