OpenFileDialog affiche toujours *.URL (fichiers de raccourci Internet)
-
19-09-2019 - |
Question
Mon OpenFileDialog
a un seul Filter
qui est aussi le DefaultExt
.Je me demande pourquoi, lorsque la boîte de dialogue s'ouvre, tous les raccourcis Internet sont également répertoriés (il est acceptable d'obtenir les raccourcis vers les dossiers, par exemple, mais pas les fichiers *.URL).
Existe-t-il un interrupteur magique que je peux activer afin de les inclure dans la liste affichée à l'utilisateur ?
Actuellement, je dois gérer cette condition dans le FileOk
gestionnaire d'événements en définissant e.Cancel
à true
si je détecte que l'utilisateur a sélectionné un *.URL
fichier (il ne fonctionne pas non plus à 100% du temps, certains raccourcis semblent encore passer via le FileOk
filtre).Il serait cependant préférable de ne pas les inscrire dans la liste en premier lieu.
La solution
Vous avez raison : les boîtes de dialogue courantes d'ouverture de fichier de Windows affichent les raccourcis Internet ainsi que les dossiers.Je n'ai aucune idée de la raison pour laquelle ce comportement existe, mais il est là - et cela se produit dans Win32 (essayez le Bloc-notes pour vérifier) ainsi que dans les applications WinForms.
Il existe un moyen de contourner ce problème, mais attention :c'est bidon !Si vous dérivez une classe de boîte de dialogue de fichier personnalisée à partir de la classe FileDialog, vous avez accès à quelques événements protégés que vous pouvez utiliser pour personnaliser chaque aspect du fonctionnement de FileDialog.
Dino Esposito a écrit un article dans MSDN Magazine en novembre 2003 qui montre le fonctionnement de cette technique.Cet article n'est plus sur le site MSDN mais vous pouvez le récupérer dans les archives de Wayback Machine ici : http://web.archive.org/web/20150117123625/http://msdn.microsoft.com/en-us/magazine/cc300434.aspx.
Ce que vous devrez probablement faire est d'accrocher ou de sous-classer le WndProc de la boîte de dialogue de fichier, de parcourir manuellement le contrôle de liste de fichiers, d'identifier les entrées qui étaient des raccourcis et d'envoyer des messages Windows au contrôle de liste de fichiers pour supprimer ces éléments.Ensuite, vous devrez surveiller les actualisations de cette liste (par ex.suite à un changement de répertoire) et répétez l'opération de filtrage.
Ce serait un énorme hack, mais c'est possible.
Si cela demande trop de travail ou si le piratage est trop important, je suggère simplement d'utiliser l'événement FileOk pour empêcher les utilisateurs de sélectionner un raccourci en retournant Cancel=true
à partir de votre CancelEventHandler pour l’événement FileOk.
Autres conseils
Annoying. Vous pouvez les Whack mettant en place un gestionnaire pour l'événement FileOk afin que l'utilisateur ne peut jamais choisir un:
private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {
string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);
if (String.Compare(ext, ".url", true) == 0) e.Cancel = true;
}