mokni_mehdi_3m
Messages postés40Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention22 mars 2006
-
24 oct. 2005 à 15:45
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
24 oct. 2005 à 17:38
Salut tout le monde
J'ai un formulaire constituer de plusieurs txtbox, Je veux que la touche entrer me permet de passer d'un txtbox a un autre comme la touche tab (la touche entrer doit deplacer le focus d'un txtbox a un autre avec l'ordre des tabindex)
Et merci d'avence
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 24 oct. 2005 à 16:25
Salut
Pour savoir si la touche Entrée est utilisée dans un TextBox, rien de difficile :
Dans monTextBox.KeyDown, il suffit de faire :
If KeyCode = vbKeyReturn Then
Ensuite, pour passer le focus au composant TextBox ou CommandButton suivant en respectant l'ordre des TabIndex, il suffit de les scanner et chercher le composant dont le TabIndex = monTabIndex + 1.
Je te propose ces lignes.
Analyse-les et adapte-les à tes besoins car elles ne fonctionneront pas telles quelles :
Dim monIndex As Long, xxx As Object
If KeyCode = vbKeyReturn Then
KeyCode = 0 ' pour éviter les Beep
monIndex = Text1.TabIndex
For Each xxx In Me
If TypeOf xxx Is TextBox Or _
TypeOf xxx Is CommandButton Then
If xxx.TabIndex = monIndex + 1 Then
xxx.SetFocus
Exit For
End If
End If
Next
End If
Le plus simple serait d'avoir des composants indexés (même nom avec des Index) qui se suivent.
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 la partage. (Socrate)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013131 24 oct. 2005 à 16:28
Utilise le KeyPreview de la feuille, et ensuite, donne le focus au
textbox dont le tabindex suit le tabindex du contrôle qui a
actuellement le focus (il faut bien entendu qu'aucun bouton n'ai sa
propriété Default à true).
En clair, cela donne :
Dans un module :
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" ( _
ByVal hwnd As Long) As Long
Public Sub DefineFocus(ByRef frmFeuille As Object, ByVal KeyCode As Integer)
'l'erreur etant minime, on continue l'éxécution normalement
'déclaration des variables privées
Dim iIndex As Integer 'stocke l'index de tabulation du contrôle courant
Dim iNombreControles As Integer 'stocke le nombre de contrôle de la feuille
Dim oFor1 As Object 'stocke les valeurs de la boucle For->Each
Dim iFor1 As Integer 'stocke les valeurs de la boucle For->Next
'on récupère le nombre de contrôles de la feuille
For Each oFor1 In frmFeuille.Controls
Let iNombreControles = iNombreControles + 1
Next
'on récupère l'index de tabulation du contrôle actif
Let iIndex = frmFeuille.ActiveControl.TabIndex
'on parcourt tout les contrôles et on définit le contrôle à activer
For iFor1 = iIndex To iNombreControles
For Each oFor1 In frmFeuille.Controls
If
Not TypeOf oFor1 Is Label And Not TypeOf oFor1 Is Frame And Not TypeOf
oFor1 Is Line And Not TypeOf oFor1 Is Shape And Not TypeOf oFor1 Is
PictureBox And Not TypeOf oFor1 Is Image Then
If KeyCode = vbKeyUp Then
If oFor1.TabIndex = iFor1 - 1 Then
Call Putfocus(oFor1.hwnd)
Exit Sub
End If
ElseIf KeyCode vbKeyDown Or KeyCode vbKeyReturn Then
If oFor1.TabIndex = iFor1 + 1 Then
Call Putfocus(oFor1.hwnd)
Exit Sub
End If
End If
End If
Next
Next
'on recommence de zéro si on n'a pas réussi à trouver un contrôle à activer
Let iIndex = -1
For iFor1 = iIndex To iNombreControles
For Each oFor1 In frmFeuille.Controls
If oFor1.TabStop Then
If KeyCode = vbKeyUp Then
If oFor1.TabIndex = iFor1 + 1 Then
Call Putfocus(oFor1.hwnd)
Exit Sub
End If
ElseIf KeyCode vbKeyDown Or KeyCode vbKeyReturn Then
If oFor1.TabIndex = iFor1 - 1 Then
Call Putfocus(oFor1.hwnd)
Exit Sub
End If
End If
End If
Next
Next
End Sub
Et dans ta feuille :
Form_KeyDown(...)
Call DefineFocus(Me, KeyCode)
End Sub
_____________________________________________________________________
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 oct. 2005 à 17:38
salut,
arrête de poster sans cesse les mêmes Topics, surtout quand toutes (ou presque) les solutions t'ont été apportées.
(merci celà dit pour l'effort de taille de typo)
PCPT [AFCK]