Comment utiliser OpenFileDialog pour sélectionner un dossier?

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 OPENFILENAME structure OPENFILENAME . Et OPENFILENAME a le membre nommé templateID . C’est l’identifiant du modèle de dialog. Et le projet contient également le fichier res1.rc et le dialog res1.rc un modèle. Mais je ne pouvais pas comprendre comment joindre ce fichier à mon projet C #.

Existe-t-il un meilleur moyen d’utiliser un OpenFileDialog pour sélectionner des dossiers?

    Fondamentalement, 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 && !ssortingng.IsNullOrWhiteSpace(fbd.SelectedPath)) { ssortingng[] files = Directory.GetFiles(fbd.SelectedPath); System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToSsortingng(), "Message"); } } 

    Si vous travaillez dans WPF, vous devez append la référence à System.Windows.Forms .

    vous devez également append à l’ using System.IO pour la classe Directory

    Comme note pour les futurs utilisateurs qui voudraient éviter d’utiliser FolderBrowserDialog , Microsoft a publié une API appelée WindowsAPICodePack qui CommonOpenFileDialog une boîte de dialog utile appelée CommonOpenFileDialog , qui pourrait être définie dans un mode IsFolderPicker .

    Si vous avez access aux packages nuget, il est toujours disponible dans les listes publiques en tant que WindowsAPICodePack

    Pour la ligne include:

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

    Étrange que tant de réponses / votes, mais personne n’ajoute le code suivant comme réponse:

     using (var folderDialog = new FolderBrowserDialog()) { if (folderDialog.ShowDialog() == DialogResult.OK) { // folderDialog.SelectedPath -- your result } } 

    Cela me semble être juste après le FolderBrowserDialog .

    Il existe une solution pirate utilisant OpenFileDialogValidateNames et CheckFileExists sont tous deux définis sur false et FileName se voit atsortingbuer une valeur simulée pour indiquer qu’un répertoire est sélectionné.

    Je dis pirater car il est déroutant pour les utilisateurs sur la façon de sélectionner un dossier. Ils doivent être dans le dossier souhaité, puis appuyez simplement sur Ouvrir pendant que le nom du fichier indique “Sélection du dossier”.

    Boîte de dialogue de sélection de dossier C #

    Ceci est basé sur Select file ou folder du même dialog 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) { ssortingng folderPath = Path.GetDirectoryName(folderBrowser.FileName); // ... } 

    Voici une autre solution, qui contient toutes les sources dans un seul fichier ZIP simple.

    Il présente OpenFileDialog avec des indicateurs Windows supplémentaires qui le font fonctionner comme la boîte de dialog de sélection des dossiers de Windows 7+.

    Selon le site Web, il s’agit du domaine public: “Il n’y a pas de licence en tant que telle, vous êtes libre de le faire et de faire ce que vous voulez avec le code.”

    Liens Archive.org: