261 votes

Comment configurer un OpenFileDialog pour sélectionner des dossiers?

Dans VS .NET, lorsque vous sélectionnez un dossier pour un projet, une boîte de dialogue qui ressemble à un OpenFileDialog ou SaveFileDialog est affiché, mais est configuré pour accepter seulement les dossiers. Depuis que j'ai vu ce que j'ai voulu savoir comment c'est fait. Je suis conscient de la FolderBrowserDialog, mais je n'ai jamais vraiment aimé cette boîte de dialogue. Il commence à trop petite et ne me permet pas de prendre avantage de pouvoir tapez un chemin d'accès.

Je suis presque certain maintenant, il n'y a pas moyen de le faire partir .NET, mais je suis tout aussi curieux de voir comment vous le faire à partir de code non managé. Court de complètement de réimplanter la boîte de dialogue à partir de zéro, comment voulez-vous modifier la boîte de dialogue d'avoir ce comportement?

Je tiens également à souligner que je suis conscient de la FolderBrowserDialog mais parfois, je n'aime pas l'utiliser, en plus d'être vraiment curieux de savoir comment configurer une boîte de dialogue de cette manière. Me disant simplement utiliser le FolderBrowserDialog m'aide à maintenir une INTERFACE cohérente de l'expérience, mais ne pas satisfaire ma curiosité, donc il ne compte pas comme une réponse.

Ce n'est pas un Vista spécifiques chose; j'ai été voir cette boîte de dialogue depuis VS .NET 2003, de sorte qu'il est faisable en Win2k et WinXP. C'est moins d'un "je veux connaître la bonne façon de le faire" à la question et plus d'un "j'ai été curieux au sujet de ce depuis que j'ai voulu le faire en VS 2003" question. Je comprends que Vista boîte de dialogue de fichier a une option pour le faire, mais elle fonctionne sous XP donc je sais qu'ils ont fait quelque chose pour le faire fonctionner. Vista-des réponses précises ne sont pas des réponses, parce que Vista n'existe pas dans la question de contexte.

Mise à jour: je suis en acceptant Scott Wisniewski réponse, car il est livré avec un échantillon de travail, mais je pense que Serge a le mérite de pointage de la boîte de dialogue de personnalisation (qui est certes désagréable .NET, mais il n' travail) et la Marque de Rançon pour comprendre que MME roulé probablement un dialogue personnalisée pour cette tâche.

61voto

Scott Wisniewski Points 14420

J'ai une boîte de dialogue que j'ai écrit appelé OpenFileOrFolder boîte de dialogue qui vous permet d'ouvrir un dossier ou un fichier.

Si vous définissez c'est AcceptFiles de la valeur à false, alors il ne fonctionne que dans d'accepter le mode dossier.

Vous pouvez télécharger la source par ici:

https://github.com/scottwis/OpenFileOrFolderDialog

Si vous avez des questions, souhaitez plus d'informations sur la façon dont il fonctionne, ou que vous voulez contribuer, envoyez-moi un message par courriel à:

scott@transactor.com

51voto

Je sais que je suis réel retard avec cette réponse, mais juste pour l’amour de référence il y a aussi le Windows API Code Pack, trouvé ici il a eu beaucoup de coquille lié trucs, y compris la classe CommonOpenFileDialog.

Instancier que classe, l’ensemble de la propriété IsFolderPicker à true et c’est parfaite - l’habitude ouvre le dialogue avec les seuls dossiers affichés.

49voto

Cheeso Points 87022

Vous pouvez utiliser FolderBrowserDialogEx - une ré-utilisable dérivés de l'intégré dans FolderBrowserDialog. Celui-ci vous permet de taper dans un chemin, même un chemin d'accès UNC. Vous pouvez également rechercher des ordinateurs ou des imprimantes. Fonctionne exactement comme le haut-LOG, mais ... mieux.

(EDIT: je devrais avoir souligné que ce dialogue peut être configurée pour sélectionner des fichiers ou des dossiers. )

L'intégralité du code Source (un bref C# module). Gratuit. MS-Public license.

Code à utiliser:

     var dlg1 = new Ionic.Utils.FolderBrowserDialogEx();
     dlg1.Description = "Select a folder to extract to:";
     dlg1.ShowNewFolderButton = true;
     dlg1.ShowEditBox = true;
     //dlg1.NewStyle = false;
     dlg1.SelectedPath = txtExtractDirectory.Text;
     dlg1.ShowFullPathInEditBox = true;
     dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer;

     // Show the FolderBrowserDialog.
     DialogResult result = dlg1.ShowDialog();
     if (result == DialogResult.OK)
     {
         txtExtractDirectory.Text = dlg1.SelectedPath;
     }

38voto

Christian Klauser Points 2611

Le package Ookii.Dialogs contient un wrapper géré autour de la nouvelle boîte de dialogue du navigateur de dossiers.

29voto

Ryan Farley Points 7916

Mieux vaut utiliser le FolderBrowserDialog pour cela.

 using (FolderBrowserDialog dlg = new FolderBrowserDialog())
{
    dlg.Description = "Select a folder";
    if (dlg.ShowDialog() == DialogResult.OK)
    {
        MessageBox.Show("You selected: " + dlg.SelectedPath);
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X