IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] [Validate et CausesValidation] Ca marche pas toujours !!!


Sujet :

VB 6 et antérieur

  1. #1
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut [VB6] [Validate et CausesValidation] Ca marche pas toujours !!!
    Bonjour à tous,

    Sur une form, collez 2 TextBox.
    Coller ça dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        If vbKeyReturn Then 'si Entrée passe au second TextBox
            Me.Text2.SetFocus
        End If
    End Sub
     
    Private Sub Text1_Validate(Cancel As Boolean)
        MsgBox "Text1_Validate"
    End Sub
     
     
    Private Sub Text2_Validate(Cancel As Boolean)
        MsgBox "Text2_Validate"
    End Sub
    Si vous passez du premier au second TextBox avec un clic souris ou un Tab, le validate Text1 est appelé. OK.

    Mais si vous appuyez sur Entrée après avoir rempli la première TextBox rien ne se passe !!!

    Si quelqu'un voit une alternative.....

  2. #2
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        If vbKeyReturn Then 'si Entrée passe au second TextBox
            SendKeys "{TAB}"
        End If
    End Sub

  3. #3
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Oui, mais .......

    Le sendkeys a des comportements étranges: il éteint pendant quelques millisecondes la led du pavé numérique !!!

    Et si je veux mettre le focus sur le composant que je veux et qu'il n'est pas le suivant dans l'ordre des TabIndex ?

  4. #4
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 42
    Points : 46
    Points
    46
    Par défaut
    Arff !!! Bien vu Thierry AIM.

    J'allais répondre la même chose.

    Apparemment, l'évènement SetFocus gêne le fonctionnement de Validate.

  5. #5
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par LERAY
    Apparemment, l'évènement SetFocus gêne le fonctionnement de Validate.
    Oui mais comment "envoyer" le focus au composant voulu ?

  6. #6
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 42
    Points : 46
    Points
    46
    Par défaut
    Tu peux faire un SetFocus sur le composant voulu en mettant le code dans l'évènement LostFocus, celui-ci s'exécutant après l'évènement Validate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Text1_LostFocus()
        Text2.SetFocus
    End Sub
    Apparemment ça marche.

  7. #7
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Je ne peux pas faire quelque chose de pareil !!!
    Ca impose l'ordre de saisie: après avoir saisi le Text1, si l'utilisateur sélectionne un autre contrôle, le focus va repasser automatiquement au Text2....

  8. #8
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 42
    Points : 46
    Points
    46
    Par défaut
    Si je comprends bien, tu veux :

    1)° que l'utilisateur puisse passer d'un contrôle à un autre en cliquant dessus

    2°) que le programme sélectionne le contrôle suivant si l'utilisateur tape Enter

    Et ceci tout en validant les données présentes dans le contrôle qui perd le focus.

    Si c'est celà que tu veux, tu pourrais procéder comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub text1_gotfocus()
        Text1.Tag = 0
    End Sub
     
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        If KeyAscii = 13 Then
            KeyAscii = 0 ' permet d'éviter le petit clic disgracieux !!!
            SendKeys "{tab}"
            Text1.Tag = 1
        End If
    End Sub
     
    Private Sub Text1_LostFocus()
        If Text1.Tag = 1 Then Text2.SetFocus
    End Sub
     
    Private Sub Text1_Validate(Cancel As Boolean)
        If Text1.Text <> "saisie" Then
            Text1.Tag = 0
            Cancel = True
            MsgBox "mauvaise entrée"
        End If
    End Sub
    Tu te sers de la propriété Tag, que tu mets à 1 si la touche Enter est pressée pour que LostFocus passe au contrôle suivant, sinon il donne le focus au contrôle que l'utilisateur a cliqué.

  9. #9
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Tu as très bien compris ce que je voulais et tu l'as remarquablement bien codé. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. input type=image qui ne marche pas toujours
    Par lenissart dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 26/11/2008, 14h35
  2. Réponses: 3
    Dernier message: 30/11/2007, 12h59
  3. Réponses: 3
    Dernier message: 16/03/2007, 18h04
  4. ShellExecute ne marche pas toujours
    Par Micromalice dans le forum Delphi
    Réponses: 20
    Dernier message: 20/02/2007, 18h18
  5. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo