Problème de Focus

Signaler
Messages postés
116
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
29 septembre 2013
-
Messages postés
116
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
29 septembre 2013
-
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

5 réponses

Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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.
Messages postés
116
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
29 septembre 2013

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





Merci
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
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é.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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 ?
Messages postés
116
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
29 septembre 2013

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