Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

groupe de contrôles bouton

3 réponses
Avatar
Pascal
bien le bonjour,
sur une Form, j'ai un groupe de 10 contrôles bouton cmdChiffre(1) ....(10)
chaque fois que ce bouton est "cliqué", il s'illumine pour le visuel de
l'utilisateur

je cherche à pouvoir me déplacer parmis ces boutons, au moyen des touches
vbkeyadd
et vbkeysubtract (touche moins et plus)
ceci dans la sub >> Private Sub Form_KeyDown(KeyCode As Integer, Shift
As Integer) <<

Le problème est que je ne sais comment récupérer l'index puisque je ne suis
pas forcement dessus
Je crois que je m'emmêle un peu les pinceaux!
merci comme à chaque fois de vos idées

Pascal

3 réponses

Avatar
jean-marc
"Pascal" wrote in message
news:
bien le bonjour,
sur une Form, j'ai un groupe de 10 contrôles bouton cmdChiffre(1)
....(10)
chaque fois que ce bouton est "cliqué", il s'illumine pour le visuel de
l'utilisateur

je cherche à pouvoir me déplacer parmis ces boutons, au moyen des touches
vbkeyadd
et vbkeysubtract (touche moins et plus)
ceci dans la sub >> Private Sub Form_KeyDown(KeyCode As Integer, Shift
As Integer) <<

Le problème est que je ne sais comment récupérer l'index puisque je ne
suis pas forcement dessus
Je crois que je m'emmêle un peu les pinceaux!
merci comme à chaque fois de vos idées

Pascal



Hello,

C'est tout simple :-)

Il faut que ta forme est la propriété keyPreview à TRUE.
Puis il te faut une variable globale pour garder l'index
du dernier bouton qui a eu le focus, soit par action sur
les touches +/-, soitpar clic.

Puis ce code tout simple suffit.
Dans mon exemple, les boutons indexés s'appellent Command1.


' variable globale à la forme
Dim cur_cmd_index As Integer


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If (KeyCode = vbKeyAdd) Or (KeyCode = vbKeySubtract) Then
If KeyCode = vbKeyAdd Then
cur_cmd_index = cur_cmd_index + 1
If cur_cmd_index > 10 Then
cur_cmd_index = 1
End If
ElseIf KeyCode = vbKeySubtract Then
cur_cmd_index = cur_cmd_index - 1
If cur_cmd_index = 0 Then
cur_cmd_index = 10
End If
End If
Command1(cur_cmd_index).SetFocus
End If
End Sub

Private Sub Command1_Click(Index As Integer)
cur_cmd_index = Index
End Sub

' juste pour initialiser la variable globale.
Private Sub Form_Load()

cur_cmd_index = 1
End Sub

Le tout testé et fonctionnel!

Et voila :-)

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Pascal
hello jean-Marc,
Encore une fois ....toi et t'en remercie
Effectivement d'une simplicité déconcertante (l'utilisation de la variable)
j'aurai pû y penser mais bon!

Merci encore pour ton aide plus que précieuse

Pascal


"jean-marc" a écrit dans le message de news:
47285197$0$22305$

"Pascal" wrote in message
news:
bien le bonjour,
sur une Form, j'ai un groupe de 10 contrôles bouton cmdChiffre(1)
....(10)
chaque fois que ce bouton est "cliqué", il s'illumine pour le visuel de
l'utilisateur

je cherche à pouvoir me déplacer parmis ces boutons, au moyen des
touches vbkeyadd
et vbkeysubtract (touche moins et plus)
ceci dans la sub >> Private Sub Form_KeyDown(KeyCode As Integer,
Shift As Integer) <<

Le problème est que je ne sais comment récupérer l'index puisque je ne
suis pas forcement dessus
Je crois que je m'emmêle un peu les pinceaux!
merci comme à chaque fois de vos idées

Pascal



Hello,

C'est tout simple :-)

Il faut que ta forme est la propriété keyPreview à TRUE.
Puis il te faut une variable globale pour garder l'index
du dernier bouton qui a eu le focus, soit par action sur
les touches +/-, soitpar clic.

Puis ce code tout simple suffit.
Dans mon exemple, les boutons indexés s'appellent Command1.


' variable globale à la forme
Dim cur_cmd_index As Integer


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If (KeyCode = vbKeyAdd) Or (KeyCode = vbKeySubtract) Then
If KeyCode = vbKeyAdd Then
cur_cmd_index = cur_cmd_index + 1
If cur_cmd_index > 10 Then
cur_cmd_index = 1
End If
ElseIf KeyCode = vbKeySubtract Then
cur_cmd_index = cur_cmd_index - 1
If cur_cmd_index = 0 Then
cur_cmd_index = 10
End If
End If
Command1(cur_cmd_index).SetFocus
End If
End Sub

Private Sub Command1_Click(Index As Integer)
cur_cmd_index = Index
End Sub

' juste pour initialiser la variable globale.
Private Sub Form_Load()

cur_cmd_index = 1
End Sub

Le tout testé et fonctionnel!

Et voila :-)

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;








Avatar
jean-marc
"Pascal" wrote in message
news:
hello jean-Marc,
Encore une fois ....toi et t'en remercie
Effectivement d'une simplicité déconcertante (l'utilisation de la
variable)
j'aurai pû y penser mais bon!

Merci encore pour ton aide plus que précieuse

Pascal




Merci à toi pour le retour, ça fait toujours plaisir!

Bonne journée :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;