Touches clavier (fleches ne répondent pas avec "Form_KeyDown" [Résolu]

- - Dernière réponse : boujidriss
Messages postés
2
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
1 janvier 2018
- 1 janv. 2018 à 22:53
Bonjour,
J'ai écrit un petit programme qui me permet de visualiser des images que je
charge auparavent dans un "listView" (nommé EdImBdCo).
A l'aide de deux "CommandButton" (nommés CmdBack et CmdFront) je peux faire
défiler mes fichiers images vers l'arrière ou vers l'avant.
Jusqu'ici pas de probléme.
Mon souci est qu'en voulant apporter des améliorations j'ai ajouté du code
afin d'utiliser les touches de clavier (fléche gauche et droite) et celà dans
"Form_KeyDown".
Mais quand j'utilise ces touches, elles réagissent comme si j'utilisai la touche "Tabulation"
et le curseur ne fait que se déplacer d'un bouton à l'autre.

Merci pour votre aide.

Ci dessous le code concernées :

EdImBdCo_______________________
| |
|13012011133.jpg |
|13012011135.jpg |
|13012011138.jpg |
|13012011140.jpg |
|13012011141.jpg |
|13012011142.jpg |
|13012011145.jpg |
|13012011146.jpg |
|13012011147.jpg |
| |
--------------------------------
___________ ___________
| < Arrière | | > Suivant |
------------- -------------

Private Sub CmdBack_Click()
If EdImBdCo.List1.ListIndex > 0 Then
EdImBdCo.List1.ListIndex = EdImBdCo.List1.ListIndex - 1
If EdImBdCo.List1.ListIndex = 0 Then
CmdBack.Visible = False
End If
CmdFront.Visible = True
End If
End Sub

Private Sub CmdFront_Click()
If EdImBdCo.List1.ListCount > EdImBdCo.List1.ListIndex + 1 Then
EdImBdCo.List1.ListIndex = EdImBdCo.List1.ListIndex + 1
If EdImBdCo.List1.ListIndex + 1 = EdImBdCo.List1.ListCount Then
CmdFront.Visible = False
End If
CmdBack.Visible = True
End If
End Sub

Private Sub Form_Load ()
KeyPreview = True
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 39 _
Or KeyCode = 38 Then
CmdFront_Click
End If
If KeyCode = 37 _
Or KeyCode = 40 Then
CmdBack_Click
End If
KeyCode = 0
End Sub
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
3
Merci
Bonjour.

Avec KeyPreview = True et la touche Ctrl enfoncée, ça marche ! Je viens de le tester. Je n'était plus trop sûr de moi, car cela faisait longtemps que je n'avais plus programmé en VB6. Pour ceux que cela pourrait intéresser, cela fonctionne de même en VB 2010, ce que j'ai exploité dans mon dernier CodeSource.

Je salue ucfoutu au passage.


Étant illettré, je signe d'une croix : ×

Merci Zermelo 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de Zermelo
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Je te salue également, Zermelo.
Oui, puisque ce ne serait plus les flèches, mais CTRL + flèche
Ceci étant dit, je ne comprend absolument pas l'intérêt de cette complication (il faudrait en plus en informer l'utilisateur car non "intuitif"), alors qu'il lui suffit de donner systématiquement le focus à sa listview qui, elle réagira bien au Kerydown.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
2
Merci
Bonjour,
Windows intercepte prioritairement certaines touches et les traite comme IL l'entend, en fonction du contexte.
Mets donc en toute première ligne de ton évènement KeyDown
MsgBox KeyCode
et tu t'apercevras que tu n'auras même pas de message affiché si tu presses une touche flêche si, par exemple, le focus est à ce moment-là donné à un bouton de commande.
Tes flêches ne fonctionneront donc comme toi, tu l'entends, que si pour être utilisées au sein-même d'un contrôle qui les gère (textbox, etc ...), qui douit donc être celui qui a le focus.
Voilà.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
boujidriss
Messages postés
2
Date d'inscription
mercredi 30 décembre 2009
Dernière intervention
1 janvier 2018
-
Merci de ton aide
Commenter la réponse de ucfoutu
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
2
Merci
Salut

Pour que la forme soit la première à recevoir les touches, il faut que son attribut KeyPreview soit à True

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

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
2
Merci
Bonjour, jack,
Keypreview à True ou pas (et d'ailleurs il l'a bien mise à True au Load même) cela ne marchera pas pour les raisons que j'ai signalées.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Merci
Bonjour,
Merci pour vos réponses.
Et votre astuces Ctrl+Flèche marche effectivement trés bien.
Quand à "l'intérêt de cette complication" je vous signale que si la souris venait à lacher, le recours au clavier serait d'un grand secours. Un petit "Tooltiptext" et le jour est joué.
D'ailleur dans tous mes programmes j'ajoute toujours des raccourcis clavier.
Merci infiniment de votre aide.
Commenter la réponse de boujidriss
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Quand à "l'intérêt de cette complication" je vous signale que si la souris venait à lacher, le recours au clavier serait d'un grand secours.

et en quoi cela ne serait pas "réglé" (sans souris) par ceci :
donner systématiquement le focus à sa listview qui, elle réagira bien au Kerydown

?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Et j'ai adoré ceci :
Quand à "l'intérêt de cette complication" je vous signale que si la souris venait à lacher, le recours au clavier serait d'un grand secours. Un petit "Tooltiptext" et le jour est joué.

Je me demande comment le tooltiptext, déclenché au survol de la souris sur un contrôle, pourrait être déclenché lorsque la souris ne fonctopnne pas
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.