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.

Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top