[C#]Curiosité sur KeyDown et KeyPress
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:
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:
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:
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