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

Signaler
Messages postés
8
Date d'inscription
lundi 15 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2009
-
Messages postés
8
Date d'inscription
lundi 15 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2009
-
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

Messages postés
18
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
10 février 2009

pas tout compris... tu veux capter les touches alors que la messagebox est visible ? c ca ?
Fab
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
                ...........
                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
Messages postés
8
Date d'inscription
lundi 15 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2009

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 !
Messages postés
18
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
10 février 2009

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+
Messages postés
8
Date d'inscription
lundi 15 décembre 2008
Statut
Membre
Dernière intervention
20 mars 2009

Bonjour,

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

Existe t il un moyen plus simple ?