Bonjour
Je n'ai pas retrouver le thread ou cette question avait été posée, mais il me semble qu'une personne "damien xxx" avait posé la question suivante:
Existe t-il un evenement permettant de savoir qu'une fenetre de notre application a été ouverte ?
J'ai eu envie d'essayer de trouver la réponse ce matin, et je suis arrivé à faire quelque chose, mais c'est assez "obscur"
Voici le code que j'ai fait :
Et dans le code de ma form principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class Filtre : IMessageFilter { #region IMessageFilter Members public bool PreFilterMessage(ref Message m) { Trace.WriteLine(m.ToString()); if (m.Msg == 0xC0DB) { Trace.WriteLine("Création d'une nouvelle fenetre pour l'application"); Trace.WriteLine("Il y a " + Application.OpenForms.Count.ToString() + " fenetres ouvertes"); } return false; } #endregion }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Filtre toto = new Filtre(); public Form1() { Application.AddMessageFilter(toto); InitializeComponent(); }
Bon, alors le 0xc0db, je ne sais pas à quoi il correspond. J'aurais tendance
à dire qu'il correspond au cumul de valeur lorsqu'une création doit avoir lieu. C'est assez mystérieux pour savoir quels énums se cachent derrière.
J'ai testé avec des fenetres Modal ou non modale, cela fonctionne très bien.
Par contre, avec une OpenFileDialog, que nenni... (d'ailleurs, avec une OpenFileDialog (Save ca doit faire pareil), il n'y a plus aucun message qui arrive à l'application dès l'appel au ShowDialog() de cette classe
Voila, J'espère que cela aura aidé un peu la communauté. (peut-être un passage dans la FAQ...)
The Monz, Toulouse
Partager