Bonjour,

En cours de debuggage j'ai par facilité affiché deux valeurs par MessageBox, un dans l'événement intercepté KeyDown d'un textbox et l'autre dans l'événement KeyPress.

Je ne m'attendais pas à rencontrer le moindre problème sur ce point, il s'agit de base élémentaire. Or, j'ai reçu mes message dans l'ordre inverse de celui auquel je m'attendais, à savoir celui de l'ordre annoncé des événements KeyDown puis KeyPress.

J'ai donc écrit "bêtement" ceci pour m'en assurer:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("Down");
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            MessageBox.Show("Press);
        }
Et là, j'ai reçu d'abord "Press" et ensuite seulement "Down".
Comme ça me semblait illogique, j'ai déclaré une variable globale "i" et j'ai écrit ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("Down: " + i.ToString());
            i++;
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            MessageBox.Show("Press: " + i.ToString());
            i++;
        }
Et contre toute attente, j'ai reçu dans l'ordre :

- Press : 0
- Down: 0

et à la seconde touche frappée :
- Press: 2
- Down: 2

Donc, mon premier message a été construit, puis le second, et ensuite seulement les 2 incrémentations de i ont été faites. ???

J'ai alors testé ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            i++;
            MessageBox.Show("Down: " + i.ToString());
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            i++;
            MessageBox.Show("Press: " + i.ToString());
        }
et cette fois, j'ai obtenu :
- Press: 2
- Down: 1

J'en déduis l'ordre suivant :

1)Incrémentation de i dans KeyDown
2) Création du MessageBox de KeyDown
3) Incrémentation de i dans KeyPress
4) Création du MessageBox de KeyPress
5) Affichage du MessageBox de KeyPress
6) Affichage du MessageBox de KeyDown

Une âme charitable pourrait-elle m'expliquer le phénomène en jeu?

Merci d'avance,
Claude