L'icône de notification de mon application affiche et masque la fenêtre principale de l'application en conséquence. Cependant, quand une boîte de dialogue modale est ouverte (cela peut être la boîte de dialogue À propos ou Paramètres, pour en nommer quelques-uns) je veux que la boîte de dialogue modale prenne le focus au lieu d'afficher/masquer la fenêtre principale de l'application.Comment faire pour mettre au point la boîte de dialogue modale en cliquant sur l'icône notifier en C#?
Les boîtes de dialogue modales sont ouvertes avec form.ShowDialog(this)
. Disons que j'ouvre la fenêtre À propos de ce code et ensuite, sans le fermer, je passe à une application différente. Quand je reviens, si je clique sur l'icône de notification, je veux que mon application obtienne le focus. Mieux encore, je veux que la boîte de dialogue modale obtienne le focus car elle est modale, je ne peux pas utiliser le formulaire parent de toute façon.
Je garde une trace avec une variable simple bool
si n'importe quel formulaire (About, Settings, etc) est ouvert et quand je clique sur l'icône de notification je vérifie pour cette variable. Si c'est vrai, je fais quelque chose comme mainForm.Activate()
. Ceci amène réellement la forme principale et le dialogue modal à l'avant, le seul problème est qu'il ne focalise pas le dialogue modal.
Comment puis-je résoudre ce problème sans suivre la boîte de dialogue modale ouverte et appeler le .Activate()
? Cause qui serait une douleur ...
Le problème est que certaines de ces boîtes de dialogue modales ne sont pas exactement des formulaires en tant que la boîte de dialogue À propos/Paramètres. Quelques-unes d'entre elles sont des boîtes de dialogue de tâches d'une bibliothèque que j'utilise, qui, je crois utilise la nouvelle API Task Dialogs introduite dans Vista. Ceux-ci n'ont pas d'événement Activate. –
Les dialogues de tâches ont-ils une fonction publique SetFocus()? Si non, pourriez-vous mettre l'accent sur un contrôle, un bouton, une zone de texte, un type de contrôle qui prend le focus dans la boîte de dialogue? Je pense que vous pouvez obtenir un contrôle par nombre ordinal; le «premier contrôle», pour ainsi dire, ce sera donc une solution générique. Autrement dit, pas lié à un dialogue particulier. – JustBoo
Malheureusement, ni la boîte de dialogue de la tâche ni aucun contrôle ne se concentre :(Mais je pense que j'ai corrigé mon problème en recourant à l'API Windows, plus précisément en utilisant 'SetForegroundWindow()' et 'GetWindow()'. –