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

VB.NET Discussion :

Intercepter l'appuie sur plusieurs touches


Sujet :

VB.NET

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut Intercepter l'appuie sur plusieurs touches
    Bonjour

    Dans mon programme j'aimerai pourvoir passer en mode debug à l'appuie de plusieurs touche.

    Genre Ctrl+Shift+F9

    Le but et de pouvoir écrire les données hexa reçu brut et ainsi que le traitement habituel afin d'effectuer justement un débogage des données brut par rapport au traitement.

    En VB.net 2008

    Merci

  2. #2
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    J'oubliais, j'aimerais que cet évènement de détection sois général et pas seulement sur le focus en court si c'est possible.

    Sinon il va falloir que je renvoie le traitement de pas mal d'objet.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 148
    Points : 291
    Points
    291
    Par défaut
    Il faut regarder du côté de l'évenement Keypress.

    Plus d'info ici

  4. #4
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par playfone Voir le message
    Il faut regarder du côté de l'évenement Keypress.

    Plus d'info ici
    Bonjour playfone, J'était bien sur cet évènement et j'ai trouvé comment visualisé si la touche F9 est activé.

    Par contre pour le moment j'arrive pas à voir si plusieurs touche est activées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub MonTabControl1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MonTabControl1.KeyDown
            If e.KeyCode = Keys.F9 And Keys.Shift And Keys.Control Then
                Gb_Debug.Visible = True
            End If
        End Sub
    Pour "e.KeyCode = Keys.F9" mais le reste fonctionne pas.

    Je suis sur plusieurs dossier en même temps car l'un de mes programmes est en débogage donc je n'avance pas aussi vite que je voudrais sur ce problème, mais je cherche à la moindre possibilités, cela doit pas être bien compliqué.

    Par contre je n'arrive pas à appliquer ce code sur la FORM, il ne détecte rien, aucun évènements. En utilisant le TabControl pas de souci.

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 148
    Points : 291
    Points
    291
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub MonTabControl1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MonTabControl1.KeyDown
            If e.KeyCode = Keys.F9 Then
                 If e.KeyCode = Keys.Shift Then
                     If e.KeyCode = Keys.Control Then
                Gb_Debug.Visible = True
            End If
    End If
    End If
        End Sub
    Essaye comme ça peut être que...

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    et avec un peu de chance on peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if e.keycode = (keycode.F9 or keycode.shift or keycode.control) then 
    end if
    le or servant de masque binaire d'addition

  7. #7
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    J'ai trouvé quelque chose qui marche mais c'est pas top.

    J'ai essayé vos solutions mais cela marche pas car appuyant sur les 3 touches même en même temps il me crée 3 fois l’évènement pour chaque touche.

    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
     
    Private _Key1 As Boolean = False
    Private _Key2 As Boolean = False
    Private _Key3 As Boolean = False
     
     
     Private Sub MonTabControl1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MonTabControl1.KeyDown
            If e.KeyCode = Keys.F9 Then
                _Key1 = True
            End If
     
            If e.KeyCode = Keys.ShiftKey Then
                _Key2 = True
            End If
            If e.KeyCode = Keys.ControlKey Then
                _Key3 = True
            End If
     
            If _Key1 And _Key2 And _Key3 Then
                Gb_Debug.Visible = True
                _Key1 = False
                _Key2 = False
                _Key3 = False
            End If
        End Sub
    Déjà je m’était tromper sur les keys mais bon le problème est le même.

    Si vous avez une solution plus propre!!

    Ce qui faudrait c'est faire le contrôle sur F9 par exemple puis regardé si Crtl et Swift est actif.

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bonjour,

    Déjà pour que l'évènement soit géré de manière "globale" tu peux spécifier la propriété KeyPreview du formulaire à True et ainsi avoir une gestion centralisée des évènements claviers (KeyDown, KeyPress...) en plus de la gestion individuelle de chaque contrôle

    Ensuite concernant ton souci, la solution à quasiment été donnée (désolé Pol63 t'était vraiment pas loin )
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
        Static refKey As Keys = Keys.F9 Or Keys.Control Or Keys.Shift
        If e.KeyData = refKey Then
            ' Ok
        Else
            ' Non ok
        End If
    End Sub
    Note la déclaration statique est purement optionnelle (elle permet de n'avoir à calculer cette valeur de "référence" locale qu'une seule fois)

    Il existe une autre façon de faire comme ceci:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
        If e.Control AndAlso e.Shift AndAlso e.KeyCode = Keys.F9 Then
            ' Ok
        Else
            ' Non ok
        End If
    End Sub
    Ici le point fort est l'évaluation court-circuitante des test, si Ctrl n'est pas enfoncé on ne teste même pas la suite idem pour Shift.
    Après si, comme je le suppose, les propriété booléenne Control et Shift testent en interne e.KeyCode et Keys.Control (resp Keys.Shift) la 1ère solution me semble meilleure mais dans le doute (et la flemme de prendre reflector )

    Cordialement !

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    et pourtant ta solution avec la variable static est peut etre mieux ^^
    avec les andalso, tu fais 2 tests de booléen et un test d'égalité sur un entier
    alors qu'avec l'autre tu ne teste qu'une égalité entre 2 entiers

    m'enfin c'est du chipotage car la différence de temps doit etre de l'ordre de la nanoseconde ...

  10. #10
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Bonjour,

    Déjà pour que l'évènement soit géré de manière "globale" tu peux spécifier la propriété KeyPreview du formulaire à True et ainsi avoir une gestion centralisée des évènements claviers (KeyDown, KeyPress...) en plus de la gestion individuelle de chaque contrôle

    Ensuite concernant ton souci, la solution à quasiment été donnée (désolé Pol63 t'était vraiment pas loin )
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
        Static refKey As Keys = Keys.F9 Or Keys.Control Or Keys.Shift
        If e.KeyData = refKey Then
            ' Ok
        Else
            ' Non ok
        End If
    End Sub
    Note la déclaration statique est purement optionnelle (elle permet de n'avoir à calculer cette valeur de "référence" locale qu'une seule fois)

    Il existe une autre façon de faire comme ceci:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Me.KeyDown
        If e.Control AndAlso e.Shift AndAlso e.KeyCode = Keys.F9 Then
            ' Ok
        Else
            ' Non ok
        End If
    End Sub
    Ici le point fort est l'évaluation court-circuitante des test, si Ctrl n'est pas enfoncé on ne teste même pas la suite idem pour Shift.
    Après si, comme je le suppose, les propriété booléenne Control et Shift testent en interne e.KeyCode et Keys.Control (resp Keys.Shift) la 1ère solution me semble meilleure mais dans le doute (et la flemme de prendre reflector )

    Cordialement !

    Merci c'est parfait et plus propre que m'a bidouille.
    Par contre seul la 2eme proposition fonctionne pour moi. Mais elle marche et me conviens.

    Merci pour l'astuce du KeyPreview.

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

Discussions similaires

  1. [Lazarus] [Linux] Intercepter l'appui sur une touche du clavier
    Par winow dans le forum Lazarus
    Réponses: 6
    Dernier message: 28/02/2010, 20h08
  2. Réponses: 1
    Dernier message: 05/11/2008, 17h30
  3. Problème appuie sur plusieurs touches
    Par maxence51 dans le forum SDL
    Réponses: 2
    Dernier message: 23/06/2008, 16h11
  4. Réponses: 2
    Dernier message: 19/07/2006, 19h45
  5. Intercepter l'appui sur les touches spéciales
    Par Mayhem dans le forum Windows
    Réponses: 1
    Dernier message: 05/01/2006, 20h31

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