Gambas France BETA


Pas de compte ? Incription

Touche TAB

1
AuteurMessages
Patrick#1 Posté le 16/1/2017 à 16:37:54
Bonjour,
J'aimerais savoir si vous connaissez un moyen simple de simuler la touche TAB pour passer d'un champs à un autre, en faite je voudrais que les touches Enter/Return aient le même fonctionnement que TAB.
Je vous mets un petit exemple en explication :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PUBLIC SUB _new()

DIM obs AS Observer


'gestion des évenements des zones de saisie
obs = NEW Observer(Texttrs) AS "cmpt"
obs = NEW Observer(Texttrspp) AS "cmpt"
obs = NEW Observer(Texttrsa) AS "cmpt"
obs = NEW Observer(Texttrsr) AS "cmpt"
obs = NEW Observer(Texttsu) AS "cmpt"
obs = NEW Observer(Textremv) AS "cmpt"
obs = NEW Observer(Textvol) AS "cmpt"
obs = NEW Observer(Textreg) AS "cmpt"
obs = NEW Observer(Textncp) AS "cmpt"
obs = NEW Observer(Textnbc) AS "cmpt"
obs = NEW Observer(Textcee) AS "cmpt"

END

PUBLIC SUB cmpt_keypress()

IF Key.code = Key.Return OR Key.code = Key.Enter OR Key.code = Key.Tab THEN
TRY LAST.next.SetFocus
ENDIF

END

Last.next.SetFocus ne fonctionne que si les textbox appartiennent au même parent, ce qui n'est pas le cas ici.
gambix#2 Posté le 21/1/2017 à 11:20:47
Faire simple !c'est une règle implicite.

parent
--container
----enfant1
----enfant2
----enfant3
--container2
----enfant1
----enfant2
parent2
--container
----enfant1


etc... le focus parcour les conteneurs en remontant au parent a la fin de listing des enfant puis redescendant.
Il faut bien ordonner les parent et les enfants pour avoir un parcours de tabulation logique. L'onglet hiérarhie sert a ça. De plus il faut faire attention a l'arrangmenent automatique. Un objet par example contenu dans un vbox ayant un zorder le plus haut mais placé physiquement en haut de la vbox se verra replacé en zorder0 dur faite de sa position.

Bon en gros l'ordre est dans ce cas dépendant de la position dans l'editeur.

Pourquoi utiliser un observer et pas un handler de groupe ?

Public sub MyTxts_KeyPress()


End


Ou mieux une fonction private dans chaque event handler des textes ?

Par exemple dans

Public Sub Texttrs_KeyPress()

GererTab
'ici le taf a faire pour les données
end


Private Sub GererTab()
IF Key.code = Key.Return OR Key.code = Key.Enter OR Key.code = Key.Tab THEN
TRY LAST.next.SetFocus
ENDIF

End
Moins de texte dans une signature c'est agrandir son espace.
Patrick#3 Posté le 21/1/2017 à 14:41:55
Merci de m'avoir répondu.
C'est exactement le fonctionnement que je cherche à reproduire avec une autre touche que tab, pour tout dire je rajoute un onglet a une tabstrip et le reste du programme gère la touche tab et enter de la même façon, je voulais donc rester dans la même logique mais sans me casser la tête ... Vu que la touche tab fait bien le boulot toute seule, n'y a t il pas moyen de faire la même chose.
En faite c'est une question de feignant :lol:
Même chose pour les observer, je regroupe les traitements, pour exemple avec textbox qui reçoivent des données numériques je gère :
- les couleurs de background
- les décimales (virgule ou point)
- teste si numériques
et peut-être le focus suivant.

Après, si besoin, j'utilise les event des objets pour des traitements particuliers. L’avantage est que lorsque l'on a besoin de rajouter des éléments dans un formulaire avec 1 observer la moitié du boulot est fait.
1