Question

Est-il possible de modifier le comportement du OpenFileDialog afin qu'il regarde à l'intérieur des fichiers dans le dossier, il ouvre et ignore alors certains d'entre eux en fonction de leur contenu?

Un exemple serait d'ouvrir un dossier complet de fichiers Zip, mais seulement montrer ceux qui contiennent un certain fichier.

De la documentation, il y a le HookProc mais je ne sais pas exactement comment je l'utiliser.

S'il vous plaît noter que s'il est possible, je me rends compte que ce sera une opération relativement lente. En ce moment je ne suis pas préoccupé par la performance.

Merci!

Était-ce utile?

La solution

Je ne rejetterais pas la complexité du OpenFileDialog. Il est pas si facile de construire un qui fonctionne vraiment. Lorsque vous ne construisez votre propre, ce n'est pas la boîte de dialogue « normal » et par conséquent, il confond les utilisateurs. Cela est vrai même si vous le faites bien, ce qui est difficile. Donc, je vous suggère de vous en tenir à l'extension de ce qui est déjà là, plutôt que d'écrire quelque chose de nouveau.

Vérifier cet article pour une extension de DLO qui pourraient / pourrait être peaufiné pour faire exactement ce que vous voulez. Il y a un rappel que vous écrivez en C # qui répond à la sélection chemin.

Related: FolderBrowserDialogEx est une extension similaire sur FolderBrowserDialog. Malgré le nom, vous pouvez le configurer pour rechercher des fichiers, ainsi que des dossiers. Il y a un rappel qui sera appelée lorsque l'quelque chose (un dossier, un fichier) est sélectionné, et dans ce rappel vous pouvez faire ce que vous devez faire. Par exemple, regarder à l'intérieur des fichiers dans un dossier et remplir la liste des fichiers pour afficher uniquement avec les fichiers.


Une autre option que vous pourriez envisager est le bibliothèque de dialogue Ookii. Ceci est une implémentation open source du OpenFileDialog, et il comprend les emballages COM pour toutes les nouveautés de dialogue dans Vista. En utilisant cette bibliothèque, vous pouvez sauter un Vista OpenFileDialog et recevoir des événements de la IFileDialogEvents interface, dans le code C #. Un tel événement est OnFolderChange (). Dans le gestionnaire, vous pouvez appeler IFolder.GetFolder () que vous obtiendrez un IShellItem , qui vous donne le dossier que l'utilisateur est en train de changer pour. L'étape suivante serait de répertorier et potentiellement filtrer l'ensemble des fichiers, ce qui est un exercice que je laisserai au lecteur ...

Autres conseils

Non, vous devez mettre en œuvre vos propres fonctionnalités pour cela. Mais pour être honnête, la OpenFileDialog ne pas vraiment faire ensemble beaucoup de toute façon. Pour être honnête, oui, vous pourriez probablement accrocher dedans, mais vous souhaitez faire beaucoup de travail pour rien quand le vrai travail est d'inspecter le contenu des fichiers et vous pouvez écrire votre propre classe OpenFileDialog simple sur le dessus de que.

Vous trouverez peut-être cette question utile au sujet de la liste du contenu des fichiers zip:

Comment lister le contenu d'un dossier .zip en C #?

(Notez que vous pouvez potentiellement fil pour améliorer les performances, mais ne couvrent pas beaucoup de threads)

Vous pouvez probablement utiliser le code API Pack Windows (livré avec la source). Les boîtes de dialogue de fichier commun fonctionnalité expose beaucoup plus de fonctionnalités de dialogues de fichiers que les versions WinForms / WPF.

http://code.msdn.microsoft.com/WindowsAPICodePack

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top