IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

KeyUp, KeyDown et touche entrée / espace.


Sujet :

Silverlight

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Par défaut KeyUp, KeyDown et touche entrée / espace.
    Bonjour à tous,

    je réalise en ce moment un jeu avec Silverlight en C# et j'ai bien évidemment besoin d'un contrôle via le clavier.

    J'utilise pour cela un KeyHandler et deux events : KeyUp et KeyDown.

    Je m'étonne de voir que lorsque j'appuie sur la barre d'espacement ou la touche entrée, ces dernières déclenchent l'évènement KeyUp mais jamais KeyDown. Par contre, toutes les autres touches déclenchent KeyDown (lorsqu'elle sont pressées et relâchées).

    Existe-t-il une raison particulière liée à ces deux touches ou bien est-ce un problème lié au code? (Les deux peut-être?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
            private bool leftButton, rightButton, thrustButton, validButton;
     
     
            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                this.KeyDown += new KeyEventHandler(Page_KeyDown);
                this.KeyUp += new KeyEventHandler(Page_KeyUp);
            }
     
     
            void Page_KeyDown(object sender, KeyEventArgs e)
            {
                keyHandler(e.Key, true);
            }
     
            void Page_KeyUp(object sender, KeyEventArgs e)
            {
                keyHandler(e.Key, false);
            }
     
            private void keyHandler(Key key, bool bIsDown)
            {
                switch (key)
                {
                    case Key.Left:
                        leftButton = bIsDown;
                        break;
     
                    case Key.Right:
                        rightButton = bIsDown;
                        break;
     
                    case Key.Up:
                        thrustButton = bIsDown;
                        break;
     
                    case Key.Shift:
                        probeButton = bIsDown;
                        //The two lines below allow the player to fire missile faster if he
                        // or she press the fire button repeatedly
                        if (!bIsDown)
                            probePauser = 0;
                        break;
     
                    case Key.Ctrl:
                        fireButton = bIsDown;
                        //The two lines below allow the player to fire missile faster if he
                        // or she press the fire button repeatedly
                        if (!bIsDown)
                            firePauser = 0;
                        break;
     
                    case Key.Enter:
                        validButton = bIsDown;
                        break;
                }
     
            }
    Peut-être que je ne sais pas bien utiliser un moteur de recherche va savoir mais je n'ai pas trouvé de réponse à cette question.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Il faut t'abonner à KeyDown et KeyUp au niveau de ton contrôle principal (Page.xaml).

    Si c'est ce que tu fais, ben chez moi ça marche

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Par défaut
    Oui, je m'y suis abonné dans ma page.xaml.cs.

    Par contre, j'ai pas mis ici mon code utilisant la barre espace / touche entrée comme un pas doué...

    (C'est juste un case avec Key.Space et Key.Enter (à la place de Key.K) comme tu peux t'en douter...)

    C'est étrange tout ça...

    KeyUp est en l'occurrence bien déclenché lorsque la touche est relâchée, non?
    et KeyDown lorsqu'elle est enfoncée?

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Noobboy Voir le message
    KeyUp est en l'occurrence bien déclenché lorsque la touche est relâchée, non?
    et KeyDown lorsqu'elle est enfoncée?
    Oui oui c'est ça.

    J'ai simplement mis un breakpoint pour voir si je passais dedans ou pas.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Par défaut
    Ok, j'ai fait la même mais il passe uniquement dans KeyUp lorsque j'appuie sur entrée...

    Qu'est ce que tu entendais par s'abonner à l'évènement dans le Page.xaml?

    Je l'ai fait dans le .cs mais faut-il faire quelque chose dans le xaml?

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Noobboy Voir le message
    Ok, j'ai fait la même mais il passe uniquement dans KeyUp lorsque j'appuie sur entrée...

    Qu'est ce que tu entendais par s'abonner à l'évènement dans le Page.xaml?

    Je l'ai fait dans le .cs mais faut-il faire quelque chose dans le xaml?
    Non non comme tu as fait c'est bon. Je comprends pas chez moi ça fonctionne correctement.

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Par défaut
    Après maintes recherches, chacune me renvoi à la même chose :

    il faut override isInputKey pour qu'il gère les Enter / SpaceBar / Tab qui sont sinon utilisé par défaut à d'autres fins.

    J'ai trouvé un exemple sur MSDN mais il utilise ceci dans un System.Windows.Forms alors que dans le cas présent, je souhaiterais l'intégrer à mon UserControl (qui selon MSDN n'a pas de méthode héritée isInputKey...)

    Est-il possible d'utiliser cette méthode dans ce cas là?

  8. #8
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Euh tu es sûr que tu étais sur la MSDN de Silverlight là ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 76
    Par défaut
    J'ai peut-être débordé dans la msdn C#...

    Sinon, j'ai trouvé une solution temporaire à mon problème (mettre la variable de validation liée à la touche entrée à true lorsqu'elle lance KeyUp et si elle n'est pas utilisée immédiatement dans le renderer, la remettre à false...) mais je cherche toujours.

Discussions similaires

  1. [C#] KeyDown 2 touches ?
    Par telynor dans le forum Windows Forms
    Réponses: 15
    Dernier message: 04/12/2006, 16h18
  2. [MFC] la touche entrée
    Par Aradesh dans le forum MFC
    Réponses: 6
    Dernier message: 08/04/2005, 12h07
  3. Touche entrée
    Par Neptune8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 08/11/2004, 16h52
  4. Touche "Entrée" et fenetre modale
    Par pascalT dans le forum Composants VCL
    Réponses: 5
    Dernier message: 21/07/2004, 16h57
  5. touche entrée dans formulaire
    Par pram dans le forum XMLRAD
    Réponses: 8
    Dernier message: 15/04/2003, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo