Problème gestion touches [Résolu]

soussous78 47 Messages postés mardi 21 novembre 2006Date d'inscription 5 novembre 2016 Dernière intervention - 22 août 2007 à 17:39 - Dernière réponse : soussous78 47 Messages postés mardi 21 novembre 2006Date d'inscription 5 novembre 2016 Dernière intervention
- 27 mars 2008 à 14:12
Bonjour tout le monde,
J'aurai besoin de savoir comment utiliser les touches clavier sur une form
j'en suis a la phase : essayer de comprendre
Je crée un évènement :
this.Form1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.appuyTouche);

et je crée la methode:
private void appuyTouche(object sender,System.Windows.form.KeyEventArgs e)
{
   MessageBox.Show(e.KeyCode.ToString());
}

aucun message n'apparait quand j'appuie sur une touche.
par contre si je crée un button et que je met l'evenement dedans, j'ai le nom de la touche appuyée sauf la touche entrée et les flêches de direction...

Quelqu'un pourrait m'expliquer comment faire pour que les touches fonctionnent pour sur la form et pour que toutes les touches soient prises en compte?

D'avance merci
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 22 août 2007 à 19:40
3
Merci
Salut,

Pour que ta form intercepte le KeyDown, il faut tu mettes sa propriété KeyPreview a true.

Pour les touches de direction, colle cette méthode dans le code de ton formulaire :

<hr />

const
int WM_KEYDOWN = 0x100;

const
int WM_SYSKEYDOWN = 0x104;

protected
override
bool ProcessCmdKey(
ref
Message msg,
Keys keyData)
{

   const
int WM_KEYDOWN = 0x100;

   const
int WM_SYSKEYDOWN = 0x104;
   if ((msg.Msg WM_KEYDOWN) || (msg.Msg WM_SYSKEYDOWN))
   {

      switch (keyData)
      {

         case
Keys.Down:

            MessageBox.Show(
"Down");

            break;

         case
Keys.Left:

            MessageBox.Show(
"Left");

            break;

         case
Keys.Up:

            MessageBox.Show(
"Up");

            break;

         case
Keys.Right:

            MessageBox.Show(
"Right");

            break;
      }
   }

   return
base.ProcessCmdKey(
ref msg, keyData);
}
<hr />

Mx
MVP C# 

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de MorpionMx
cs_zatt 131 Messages postés mardi 21 septembre 2004Date d'inscription 23 septembre 2011 Dernière intervention - 22 août 2007 à 19:46
0
Merci
Bonjour,




this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

et la méthode:






private
void Form1_KeyDown(object sender, KeyEventArgs e)




{
    


MessageBox.Show(e.KeyCode.ToString());


}

c'est tout :)
Commenter la réponse de cs_zatt
soussous78 47 Messages postés mardi 21 novembre 2006Date d'inscription 5 novembre 2016 Dernière intervention - 2 sept. 2007 à 18:33
0
Merci
ok ca marche merci beaucoup..
Commenter la réponse de soussous78
soussous78 47 Messages postés mardi 21 novembre 2006Date d'inscription 5 novembre 2016 Dernière intervention - 27 mars 2008 à 14:12
0
Merci
sinon quelqu'un aurait il une astuce pour ne pas avoir le temps d'arret a l'appui d'une touche?
Je m'explique. Lors de l'appui d'une touche, la touche se note, puis il y a une pause et ensuite si la touche est toujours appuyée, on a plusieurs fois la touche inscrite sur l'ecran.
Je voudrai savoir si on peut eviter se temps d'arret?
Merci d'avance
Commenter la réponse de soussous78

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.