BUG... (keydown et picturebox = incompatibilité) ????

Résolu
Signaler
Messages postés
14
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
2 juin 2009
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour à tous, voici mon problème: Dans l'événement Keydown d'un textbox je veux savoir lorsqu'un usager appuit sur la touche "tab" ou les touches "shift + tab".

Le code suivant fait très bien le travail, excepté lorsque j'ajoute à ma form un contrôle PictureBox ou TransPictureCtl. Dès lors, le code n'arrive plus à attrapper la touche "tab". La seule solution que j'ai trouvé est d'utiliser un contrôle Image au lieu d'un PictureBox, mais il reste toujours que j'ai absoluement besoin de plusieurs TransPictureCtl dans ma form...

Quelqu'un a une solution ?
Merci en avance!

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode 9 And Shift 1 Then
MsgBox "shift+tab"
ElseIf KeyCode = 9 Then
MsgBox "tab"
End If
End Sub

5 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Il n'y a pas qu'avec un picturebox que tu rencontrera le problème, en
fait, dès que tu mets un contrôle qui peut prendre le focus, alors ton
code ne marche plus (essaye avec un commandbutton, tu verra vite !).



Cela vient sûrement de la priorité qu'accorde VB à la touche tab : il
doit donner le focus au contrôle suivant avant de déclencher le
KeyDown, et du coup, tu n'intercepte jamais le KeyDown !


La solution : faire un hook des touches du clavier (voir les sources de Keylogger par exemple).

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
3
Merci

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

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
salut,
en mettant la propriété KeyPreview à True de ta Form, le code KeyPress pour ta Form, et la propriété TabStop à False pour tes composant génants, çà devrait fonctionner.

(testé VB6 avec 2TxtBox + 1 PictureBox)

PCPT [AFCK]
3
Merci

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

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
KeyPress KeyDown *
3
Merci

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

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
14
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
2 juin 2009

Merci pour votre aide!
Après avoir compris ce qui se passait, j'ai opté pour une autre solution. J'ai mis un textbox avant et un autre apres celui que j'utilisait.

Donc ils ont respectivement 100,101 et 102 comme tabindex de sorte que je peux savoir si j'ai faite un tab ou un shift+tab à l'aide de l'événement gotFocus et je retourne le focus à mon textbox original. Les 3 textbox sont cachés dans la form alors le visuel ne souffre pas. J'ai près de 150 picturebox dans cette form là alors je n'avais pas le goût de tous les mettre à false pour le tabstop(bien que ton idée était vraiment excellente) et pour le keylogger je ne voulait ajouter trop de code puisque le projet approche les 10 000 lignes de code.

Alors, merci encore pour votre aide, vous m'avez vraiment éclairé!
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
ok ;)

si tu changes d'avis, 150 pictures, çà va vite :


Private Sub Form_Load()
Dim Ctrl As Object
For Each Ctrl In Me
If TypeOf Ctrl Is PictureBox Then Ctrl.TabStop = False
Next
End Sub


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


+

PCPT [AFCK]