Evenement KeyDown : vbKeyDown et vbKeyUp

Résolu
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 1 févr. 2009 à 15:07
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 1 févr. 2009 à 18:57
Bonjour,

Alors j'ai un problème qui me fait péter un plomb : sur un usercontrol, j'aimerais capturer l'appui sur les flèches haut et flèches bas. Seulement l'évènement KeyUp ou KeyDown ne se déclenche pas pour les flèches (mais se déclenche pour toutes les autres touches !). J'ai essayé sur une form : pareil. J'ai essayé en mettant Keypreview à true : je capture toutes les autres touches sans problème.
J'ai essayé avec du subclassing : WM_KEYDOWN ne se déclenche jamais !!!

rahhhh
Pouvez-vous m'aider ?

MadMatt

7 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
1 févr. 2009 à 17:27
Bonjour,

Attention toutefois :

Keypreeview = true ou non, le vbkeyup et vbkeydown seront "interceptés" prioritairement par VB pour le passage d'un contrôle à l'autre de certains types de contrôles, tels les CommandButtons.
Pour s'en convaincre :
Une Form avec uniquement deux boutons de commande et rien d'autre :

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
 If KeyCode = vbKeyDown Then MsgBox "coucou"
 If KeyCode = vbKeyUp Then MsgBox "coucou"
End Sub



Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
 If KeyCode = vbKeyDown Then MsgBox "coucou"
 If KeyCode = vbKeyUp Then MsgBox "coucou"
End Sub



et coucou ne s'affichera jamais, dans ce cas ...
Mais ce n'est, de surcroît, qu'un exemple parmi d'autres pièges de l'espèce (avec d'autres contrôles encore)
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
1 févr. 2009 à 18:47
Je ne le crois pas ....(du moins depuis VB seul)
Mais le sujet m'intéresse grandement (et depuiis longtemps...)
3
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
1 févr. 2009 à 15:19
salut,

testé
à l'instant
avec succès (tant avec une form qu'avec un UC) :






Option Explicit




Private Sub 
UserControl_Initialize()

    UserControl.KeyPreview = True
End Sub

Private Sub UserControl_KeyDown(KeyCode As
Integer, Shift As
Integer)
    If KeyCode = vbKeyUp Then
        Debug.Print "KEYDOWN FLECHE
HAUT"
    ElseIf KeyCode = vbKeyDown Then
        Debug.Print "KEYDOWN FLECHE
BAS"
    End If
End Sub

Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Then
        Debug.Print "KEYUP FLECHE
HAUT"
    ElseIf KeyCode = vbKeyDown Then
        Debug.Print "KEYUP FLECHE
BAS"
    End If
End Sub





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
1 févr. 2009 à 15:38
Oui, c'est KeyPreview qui fait toute la différence.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
1 févr. 2009 à 18:18
Haaaaargggg alors moi j'ai l'impression que c'est ma scrollbar qui me prend la main (car en subclassing je reçoit les WM_SCROLL quand j'appui sur les touches...
Est-il possible de dire à VB de me laisser tranquille et de me laisser faire ?

MadMatt
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
1 févr. 2009 à 18:51
Ah oui (me rappelle)....
La seule astuce que j'avais à l'époque trouvée, avait été de garder la touche ALT enfoncée en me servant des flêches (sans rien modifier du code plus haut). L'enfoncement est alors reconnu, sans même avoir à traiter celui de la touche ALT.
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
1 févr. 2009 à 18:57
Erf... VB je l'aime bien, mais des fois...
Bon je vais faire une bricole. Merci à vous

MadMatt
0