Focus

mokni_mehdi_3m Messages postés 40 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 22 mars 2006 - 24 oct. 2005 à 15:45
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Derniè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

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
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)



'======================================================================

'Sub : DefineFocus

'Date : 10/11/2004

'Auteur : DarK Sidious

'But : Permet de définir le prochain contrôle ayant le focus

'======================================================================



'on active la routine de traitement d'erreur

On Error Resume Next

'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/
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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]
0
Rejoignez-nous