JessicaR44
Messages postés116Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention29 septembre 2013
-
16 août 2006 à 21:45
JessicaR44
Messages postés116Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention29 septembre 2013
-
17 août 2006 à 21:54
Bonsoir à tous
Sous VB6, existe-t-il un moyen de savoir au profit de qui un contrôle perd le focus ?
J'ai par exemple le focus sur text1, et je clique sur un bouton "OK".
Dans l'événement "lostfocus" ou "validate" de text1, est-il possible de retouver une quelconque valeur qui permettrait d'identifier le bouton OK (avant bien sûr que ce OK ne recoive le focus)
Merci de vos réponses
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 16 août 2006 à 22:07
Salut
A mon avis non car (en vb6) les évènements LostFocus et Validate d'un contrôle se produisent avant le GotFocus d'un autre contrôle. Par contre, on peut faire l'inverse avec un truc comme ça :
Dim sControlLostFocus As String
Private Sub Text1_LostFocus()
sControlLostFocus = "Text1"
End Sub
Private Sub OK_Click()
MsgBox sControlLostFocus
End Sub
Avec ça, c'est à toi de gérer la suite. Mais si tu expliquais ce que tu veux faire, il y a peut-être une solution plus simple.
JessicaR44
Messages postés116Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention29 septembre 2013 16 août 2006 à 22:53
Bonsoir Dolphin Boy
Il s'agit d'un form avec 5 boutons:"Ajouter", "modifier" et "supprimer", ainsi que "Mettre à jour" et "Annuler"
Au départ, les 2 derniers sont invisibles. Si l'utilisateur clique sur "Modifier", les 3 premiers disparaissent et les deux derniers deviennent visibles (tu me suis? ). Un clic sur "Mettre à jour" ou "Annuler", et les trois premiers boutons redeviennent visibles, tandis que les deux derniers deviennent invisibles.
Si l'utilisateur veut faire une modif, il doit D'ABORD cliquer sur "modifier", puis seulement il peut effectuer sa modif dans le textox.
Ce que je fais:
- dans gotfocus de text1: si bouton "Mettre à jour" invisible, remettre le focus sur le bouton "Modifier", sinon laisser le focus sur text1
- dans validate de text1: si bouton "Mettre à jour" est visible, verification de la validité de l'entrée , sinon "keepfocus" est false
- Si bouton "annuler", pas d'appel de l'event validate (CausesValidation = false).
Le problème: si l'entrée n'est pas validée et que l'utilisateur clique "Annuler", le bouton "Mettre à jour" n'est pas encore invisible (il ne le sera que dans l'event click du bouton "annuler"). Il effectue donc la vérification, envoie un message d'erreur, puis seulement modifie l'affichage des boutons, Mais ma BDD a été mise à jour !!!
Il y a d'ailleurs qqch qui ne va pas, puisque Causesvalidation du bouton annuler est false; il ne devrait même pas appeler validate de text1.
J'espère que tu as compris ce que je veux dire: pas facile à expliquer en français ! Peut-être plus simple avec le code :
Dans le form_load:
cmdCancel.causesvalidation = False
Private Sub CmdModify_Click()
SetButtons False
End Sub
Private Sub Text3_GotFocus()
If Not cmdUpdate.Visible Then
CmdModify.SetFocus
Exit Sub
End If
End Sub
Private Sub Text3_Validate(KeepFocus As Boolean)
If Not cmdUpdate.Visible Then
KeepFocus = False
Else
If Not IsNumeric(Text3.Text) Or Val(Text3.Text) > 10 Then 'POUR L'EXEMPLE
KeepFocus = True
MsgBox "Inférieur ou égal à 10", vbExclamation, "Text3"
End If
End If
End Sub
Private Sub SetButtons(bVal As Boolean)
cmdAdd.Visible = bVal
CmdModify.Visible = bVal
cmdDelete.Visible = bVal
Adodc1.Enabled = bVal
cmdCancel.Visible = Not bVal
cmdUpdate.Visible = Not bVal
End Sub
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 17 août 2006 à 13:56
Bonjour,
Tout les control qui recoivent le focus ont une propriété "TabIndex"
qui définit l' ordre dans le quel celui'ci passe de l' un à l' autre.
Si Ton TextBox a comme valeur de TabIndex 2, lorsqu' il perdera son
focus , ce dernier passera au control dont le TabIndex est 3, sauf si
celeui-ci est est invisible.Dans ce cas c' est au control dont le TabIndex
est 4 qui recevera le focus.
Si tu ne veux pas qu' un control reçoit le focus, tu envoies
un SendKeys "{tab}"
A toi donc de gerer et d' exploiter cette propriété.
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 17 août 2006 à 16:42
Private Sub Text3_Validate(KeepFocus As Boolean)
c'est toi qui l'a créé ?
Parce que chez moi j'ai :
Private Sub Text3_Validate(Cancel As Boolean)
D'autre part, je ne manipule pas les adodc mais si ta textbox est en liaison avec l'adodc, il y a peut-être un paramètre (CommandType par exemple) qui fait que tu modifies en direct dans la table ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
JessicaR44
Messages postés116Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention29 septembre 2013 17 août 2006 à 21:54
Bonsoir Dolphin Boy,
Private Sub Text3_Validate(KeepFocus As Boolean): J'ai adopté la syntaxe trouvée dans MSDN: je trouve "KeepFocus" plus parlant que "Cancel"... question de goût. Mais c'est juste un nom de variable: KeepFocus=False equivaut à Cancel=False.
Pour ADODC, je vais essayer de trouver; je sais qu'en DAO, ca existe avec DataChanged, donc ...
Merci à toi en tout cas
Jessica