[C#] [Event OnKeyUP] L'event ne se lève qu'une seule fois ...

khattr Messages postés 8 Date d'inscription lundi 15 décembre 2008 Statut Membre Dernière intervention 20 mars 2009 - 6 févr. 2009 à 11:21
khattr Messages postés 8 Date d'inscription lundi 15 décembre 2008 Statut Membre Dernière intervention 20 mars 2009 - 10 févr. 2009 à 10:31
Bonjour,

Je cherche à capturer les touches Up, Down, Left, Right et Space sur ma form .

J'ai trouvé de quoi faire sur MSDN soit :

 protected override bool IsInputKey(Keys keyData)
        {            if (keyData Keys.Space || keyData Keys.Up || keyData == Keys.Down || keyData == Keys.Right || keyData == Keys.Left)
            {
                return true;
            }
            else
            {
                return base.IsInputKey(keyData);
            }
        }

        protected override void OnKeyUp(KeyEventArgs e)
        {
            switch (e.KeyData)
            {
                case Keys.Space:
                    MessageBox.Show("SP");
                break;
                case Keys.Up:
                MessageBox.Show("U");
                break;
                case Keys.Down:
                MessageBox.Show("D");
                break;
                case Keys.Right:
                MessageBox.Show("R");
                break;
                case Keys.Left:
                MessageBox.Show("L");
                    break;
            default:
             base.OnKeyDown(e);
            break;
            }
        }



Mais le problème est que au lancement de ma form, j'appuie : OK j'ai le MessageBox avec le code qui va bien..

Mais après , rien , nada, pas de levée d'Event ...

Est ce qu'une âme éclairée pourrait m'aider à trouver où j'ai fait ma boulette ????

Merci d'avance
Khattr

5 réponses

fcaruso Messages postés 18 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 10 février 2009
6 févr. 2009 à 18:58
pas tout compris... tu veux capter les touches alors que la messagebox est visible ? c ca ?
Fab
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 févr. 2009 à 20:59
                ...........
                case Keys.Left:
                MessageBox.Show("L");
                    break;
            default:
             base.OnKeyUp(e);
            break;
            }
        }

Attention, l'évènement KeyUp est déclenché lorsque la touche est relachée, pas quand elle est appuyée

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
khattr Messages postés 8 Date d'inscription lundi 15 décembre 2008 Statut Membre Dernière intervention 20 mars 2009
9 févr. 2009 à 16:44
Bonjour,

Je me suis mal exprimé... En fait, je cherches à piloter au clavier une cartographie : si j'appuie sur Haut ma carte remonte  , si j'appuie sur espace je pose un waypoint sur à l'endroit défini par le curseur...

Dans un premier temps (l'exemple),je voulais juste afficher un MessageBox quand j'appuie sur les touches à détecter ...

Mais cela ne marche que la première fois ...c'est à dire que la première touche pressé est détectée ... mais pas les suivantes ...

>> Casy, Bien vu mais cela ne change rien à mon problème ...

Pourquoi est ce que l'event n'est levé qu'une seule fois ????

Mais à la réflexion, si je dois pouvoir être tout le temps sensible à ces touches , ne faut-il pas que je mette en place un "hook" général plutot que d'overrider un ou plusieurs KeyPress ????

Merci !
0
fcaruso Messages postés 18 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 10 février 2009
10 févr. 2009 à 08:17
ben le probleme c'est surtout que quand la messagebox est là c'est elle qui recoit les evenements KeyUp/KeyDown. C toujours le controle qui a le focus qui se prends ces evenements là.

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
khattr Messages postés 8 Date d'inscription lundi 15 décembre 2008 Statut Membre Dernière intervention 20 mars 2009
10 févr. 2009 à 10:31
Bonjour,

OK, donc il faudrait que je redirige les evenement Keyup/Keydown de tous les contrôles ?

Existe t il un moyen plus simple ?
0
Rejoignez-nous