Capturer l'appui sur une touche sur tout une form

Signaler
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
Bonjour,
J'ai une form avec des boutons texbox combo ....
Je voudrais faire comme un hook pour capturer l'appui sur le clavier de certaines touches.
En effet je ne veux pas que les touches appuyées apparaissent dans la textbox si c'est elle qui a le focus.
Merci

www.survey-copter.com

1 réponse

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
38
Salut

Utilise la propriété KeyPreview de ta form et mets-là à true. Ça enverra d'abord les événements de clavier à ta form avant de les envoyer à ta textbox (KeyUp / KeyDown / KeyPressed)

Avec KeyUp et KeyDown, tu pourras voir très simplement sur quelle touche tu as appuyé grâce à e.KeyCode
Avec KeyPressed, tu ne pourras pas voir quelle touche, mais uniquement quel caractère tu as tapé : e.KeyChar (d'ailleurs, cet événement n'est pas appelé lorsque tu appuies sur Ctrl par exemple).

Cependant, l'événement qui remplit la textbox est l'événement KeyPressed, donc c'est celui-là dont il faut que tu t'occupes si tu souhaites qu'il n'aille pas jusqu'à la textbox.

=> Exemple pour empêcher l'utilisateur de taper un 'C' dans une textbox et affiche un message

this.KeyPreview = true;
this.KeyPressed += new KeyPressEventHandler(Form1_KeyPress);

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{    if (e.KeyChar 'c' || e.KeyChar 'C')
    {
        e.Handled = true; // Si l'événement est Handled, il n'est pas utilisé ailleurs (dans ta textbox par exemple)
        MessageBox.Show("Tu as appuyé sur C et rien n'a été tapé dans ta textbox.");
    }
}

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -