MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
1 févr. 2009 à 15:07
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 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 !!!
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 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)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 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 ?
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 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.