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

C# Discussion :

[C# 3.0] Connaître l'état d'une touche.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Par défaut [C# 3.0] Connaître l'état d'une touche.
    Salut à tous,

    Attention, je suis débutant… merci de votre indulgence.

    Dans mon programme, j’ai besoin de connaître si la touche Escape est appuyée pour interrompre une boucle.

    Je pensais naïvement qu’en faisant appel à la méthode System.Windows.Input.Keyboard.IsKeyDown(Key key) je pouvais tester n’importe qu’elle touche.

    Hélas, cela ne semble pas aussi simple (cette méthode me retourne toujours false).

    Merci pour votre aide.
    Gilles

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu t'abonnes à l'event KeyDown et dedans, tu regardes si e.Key == Keys.Escape. Si oui, tu fais ton traitement

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Par défaut
    Merci de ta réponse.
    Mon problème est justement que je ne sais pas comment m’abonner à cet événement.
    Pas de problème pour m’abonner au Keydown d’une WinForm, mais aucune idée pour le Keyboard.
    Sur un autre forum, on me dit que cela ne peut marcher que dans une application WPF et pas dans une WinForm.

    Bon, sinon j’ai d’abord essayé de m’en tirer avec le Keydown de ma Form. Mais une fois que l’on clique sur un bouton pour exécuter une tache, cet événement ne semble plus intervenir.

    On me conseille de passer plutôt par une API Win32 (GetKeyState etc…)

    Tu confirmes ?
    Merci.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut Gilprod,

    d'apres ce que je comprends, le probleme vient du fait que ton traitement doit etre surement synchrone (comprendre fait dans le meme thread que ton appli), de fait l'UI ne gere plus les events clavier.

    Autre possibilité, si l'hypothese du dessus n'etait pas la bonne, quand tu cliques sur le bouton, ce dernier attrape le focus, et de fait l'event KeyDown de la form ne reagit plus (c'est l'eventuel KeyDown du button qui reagirait). Dans ce deuxieme cas, tu as deux solutions, soit un abonnement en cascade des events KeyDown des controls de ta form (c'est pas tres joli AMHA), soit un petit hook-thread (avec quelques appels natifs), plus sympa.

    Bon courage.

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonjour,

    Citation Envoyé par Thomas Lebrun Voir le message
    Tu t'abonnes à l'event KeyDown et dedans, tu regardes si e.Key == Keys.Escape. Si oui, tu fais ton traitement
    C'est normal que l'événement ne réagit pas pour une WinForm ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Par défaut
    Bon, concernant System.Windows.Input.Keyboard.IsKeyDown(Key key), cela ne marche qu’avec Vista et je suis sous XP. (voir site Crosoft).

    J’ai essayé avec l’API user32.dll, GetKeyState.
    Ça marche tant que la Form à le focus, mais dés que je clique sur mon bouton, GetKeyState me retourne toujours la même valeur. Et là, je ne pige pas pourquoi ?

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par harz62 Voir le message
    Bonjour,


    C'est normal que l'événement ne réagit pas pour une WinForm ?
    Normalement, c'est justement utilisé dans les WindowsForms....

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Bonsoir,

    L'événement fonctionne sur des textBox par exemple mais ça ne fonctionne pas pour des formulaires l'événement ne se déclenche pas lorsque l'on presse une touche.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Par défaut
    L'événement fonctionne sur des textBox par exemple mais ça ne fonctionne pas pour des formulaires l'événement ne se déclenche pas lorsque l'on presse une touche.
    Mettre KeyPreview sur True dans les propriétés de ta Form.

    Mais ça ne résout pas mon problème…

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/03/2012, 15h35
  2. connaitre état d'une touche clavier
    Par orelero dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 13/06/2006, 18h27
  3. [TListView] Comment connaître la largeur d'une colonne ?
    Par remixtech dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/04/2005, 13h18
  4. Connaître l'état d'une connexion réseau
    Par SteelBox dans le forum Windows
    Réponses: 8
    Dernier message: 29/07/2004, 12h30
  5. Connaître l'état d'un service
    Par NoisetteProd dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/08/2003, 17h04

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