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 GetOpenFileName
fonction et la OPENFILENAME
structure. Et OPENFILENAME
a nommé le membre templateID
. C'est l'identifiant du modèle de dialogue. Et le projet contient leres1.rc
fichier et l'initialisation de la boîte de dialogue. Mais je n'ai pas pu comprendre comment attacher ce fichier à mon projet C #.
Existe-t-il une meilleure façon d'utiliser un OpenFileDialog
pour sélectionner des dossiers?
ValidateNames
etCheckFileExists
sont tous deux définis sur false etFileName
reçoit une valeur factice pour indiquer qu'un répertoire est sélectionné. Je dis pirater, car il est déroutant pour les utilisateurs de sélectionner un dossier. Voir Sélectionner un fichier ou un dossier dans la même boîte de dialogueValidateNames
etCheckFileExists
àfalse
ne fonctionnait pas, je devais les mettre à0
(ou apprendre Powershell mieux)Réponses:
Fondamentalement, vous avez besoin de la
FolderBrowserDialog
classe:Exemple:
Si vous travaillez dans WPF, vous devez ajouter la référence à
System.Windows.Forms
.vous devez également ajouter
using System.IO
pour laDirectory
classela source
new CommonOpenFileDialog { IsFolderPicker = true }
.Pour les futurs utilisateurs qui souhaitent éviter d'utiliser
FolderBrowserDialog
, Microsoft a publié une fois une API appelée WindowsAPICodePack qui avait une boîte de dialogue utile appeléeCommonOpenFileDialog
, qui pouvait être définie dans unIsFolderPicker
mode. L'API est disponible auprès de Microsoft en tant que package NuGet .C'est tout ce dont j'avais besoin pour installer et utiliser le
CommonOpenFileDialog
. (NuGet a géré les dépendances)Pour la ligne d'inclusion:
Usage:
la source
Microsoft.WindowsAPICodePack.Shell
package via NuGet avant de pouvoir l'utiliserCommonOpenFileDialog
.FolderBrowserDialog
utilisateurs: l'utilisation simultanée de plusieurs instances de celui-ci peut créer des problèmes. C'estCommonOpenFileDialog
mieux.WindowsAPICodePack-Shell
Il existe une solution de piratage utilisant
OpenFileDialog
oùValidateNames
etCheckFileExists
sont tous deux définis sur false etFileName
reçoit une valeur factice pour indiquer qu'un répertoire est sélectionné.Je dis pirater, car il est déroutant pour les utilisateurs de sélectionner un dossier. Ils doivent être dans le dossier souhaité, puis appuyez simplement sur Ouvrir pendant que le nom du fichier dit "Sélection du dossier".
Ceci est basé sur Sélectionner un fichier ou un dossier dans la même boîte de dialogue par Denis Stankovski.
la source
Folder Selection.
cela sera collé à la fin du nom de fichier comme ceci:C:\Folder Selection.
je suppose que vous pouvez toujours supprimer ces caractères de la chaîne. Est toujours meilleur que le FolderBrowserDialogOpen
bouton principal de la boîte de dialogue ne fonctionne pas comme prévu! cela vous fait revenir au dossier précédent! mais cela fonctionne lorsque vous double-cliquez simplement sur des dossiers pour les sélectionner ou sélectionnez des fichiers à l'intérieur de chaque dossier (s'il y a un fichier que vous pouvez choisir)Étrange que tant de réponses / votes, mais personne n'ajoute le code suivant comme réponse:
la source
Cela me semble être juste après le FolderBrowserDialog .
la source
Voici une autre solution, qui a toutes les sources disponibles dans un seul fichier ZIP simple.
Il présente l'OpenFileDialog avec des indicateurs de fenêtres supplémentaires qui le font fonctionner comme la boîte de dialogue de sélection de dossier de Windows 7+.
Selon le site Web, c'est du domaine public: "Il n'y a pas de licence en tant que telle, vous êtes libre de prendre et de faire ce que vous voulez avec le code."
Liens Archive.org:
la source
Jetez un œil aux bibliothèques Ookii Dialogs qui ont une implémentation d'une boîte de dialogue de navigateur de dossier pour Windows Forms et WPF respectivement.
la source
cela devrait être le moyen le plus évident et le plus simple
la source
FolderBrowserDialog
a déjà été proposé ici plusieurs fois et n'est pas la bonne réponse. C'est une interface obsolète et très peu conviviale. Il utilise enSHBrowseForFolder
dessous, et même l'état des documents "Pour Windows Vista ou version ultérieure, il est recommandé d'utiliserIFileDialog
avec l'FOS_PICKFOLDERS
option plutôt que laSHBrowseForFolder
fonction. Cela utilise la boîte de dialogue Ouvrir les fichiers en mode de sélection de dossiers et est l'implémentation préférée."