Problème de Focus

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

5 réponses

Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 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.
0
JessicaR44 Messages postés 116 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 29 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





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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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


 
0
Rejoignez-nous