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 :

Gérer le focus sur des TextBox, en événementiel


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Gérer le focus sur des TextBox, en événementiel
    J'utilise une Form (classique) et des Textbox : pour vérifier les saisies, les Private Sub TextBox_Exit(Cancel), ou Private SUb TextBox_AfterUpdate() sont utilisées.
    Dans certains cas, la routine de vérification appelée par la Sub événementielle a besoin de conserver le curseur (focus) dans la même TextBox. J'ai trouvé qu'en positionnant le paramètre Cancel de la Sub TextBox_Exit(Cancel), le curseur reste dans ce même textbox.
    Dans d'autres cas, il faudrait positionner ce maudit focus dans une autre TextBox, et là pas moyen : quand on utilise la méthode Setfocus appliquée au nom de la textbox où l'on veut la positionner
    [ex : Controls("TextBox" & i).setfocus] , ça ne fonctionne pas et deplus les routines événementielles sont appelées dans tous les sens.
    Quelqu'nn sait-il faire ça ?
    Merci par avance

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Si Text1.setfocus ne donne pas le focus à Text1, c'est probablement que tu as installé ici et là des instructions de changement de focus en conflit (du genre je donne le focus à text1 et dans son événement change je lui quitte le focus)

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Gérer le focus sur des TextBox, en événementiel
    Posons le PB autrement !
    Soient TextBox1, 2 et 3 , et les Private Sub TextBox1_Exit (Cancel), 2 et 3

    Au moment où on quitte la TextBox2, la Sub TextBox2_Exit est exécutée.
    Si cette routine rencontre une certaine erreur de Saisie alors
    TextBox2.value=""
    Cancel=true
    ' et le curseur reste sur cette même textbox

    Dans un autre cas, il faut le repositionner sur la TextBox1
    TextBox2.value=""
    TextBox1.setfocus
    'Et là, patakès : TextBox2_Exit est re-appelée au moment du SetFocus, ce qui peut sembler normal, se déroule, puis reprend sont cours après l'instruction SetFocus, ce qui provoque l'appel de TextBox1_Exit ! Le Patakès je vous dis, et pas moyen de positionner sur TextBox1 !

    Que faudrait-il faire ?

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    tout celà me parait ,ormal puisque le exit intervient également lorsque tu envoies le focus ailleurs

    pourquoi ne pas ajouter dans le code à exécuter dans text2_exit une toute petite 1ère instruction du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if textbox2.value = "" then exit sub
    ?

  5. #5
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 218
    Points
    1 218
    Par défaut
    une solution simple.
    déclare au niveau général :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dim changement as booléan
    tu met ensuite dans ton cancel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     private Sub TextBox_Exit(Cancel as integer)
    if not changement then textbox.setfocus
    end sub
    ensuite, quand tu veux changer le focus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    changement=true
    autretextbox.setfocus
    changement=false

    salut

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Méphsito ...
    Bjr,

    J'ai déjà tenté des manips du genre, mais je vais creuser en tenant compte de ta proposition ...

    Ce qui m'étonne : que ce pb ne soit pas hyper bien connu et documenté, car quand on développe le moindre interface à base de saisie dans des TextBox, le pb se pose tout le temps !!

    Mais il est vrai que si on gère les vérifs des saisies par un bouton, on n'a pas tous ces pb : la routine de vérif se déclenche qd on clique sur le bouton, et les setfocus fonctionnent ...

    Je vous tiens au courant

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé une soluce, mais c'est drôlement vicieux ! Je tiens le code à la disposition de ceux que ça pourrait interesser

    Merci pour les suggestions

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour changer le focus, tu dois mettre "Cancel = True" avant de faire "MonContrôle.setfocus"

    C'est tout

    A+

  9. #9
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    La stratégie de vérification des champs lors de la sortie du champ n'est pas la plus efficace parce qu'elle entre en conflit direct avec les autres événements d'entrée de focus (GotFocus) et de sortie de focus (LostFocus). À moins d'avoir des astuces bien tordues dans sa manches.

    Essaie plutôt la vérification lors de la saisie. Par exemple pour les champs numériques tu transformes tous les caractères qui ne sont pas des chiffres en caractères zéro (chr(0)). Pour les vérifications plus complexes tu passes en revue tous les champs qui doivent absolument être validés et non vides dans une fonction de validation sur l'événement gotFocus du bouton de validation.

    C'est la stratégie la plus simple à programmer, à mon avis du moins.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Zaza a bien sûr raison. Salut zaza !
    Je répondais au sujet, pas au contexte...

    A+

  11. #11
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Salut et merci de vos avis éclairés

    Je vais essayer le conseil de Ouskel'n'or ...

    Pour zazaraignée : c'est vrai que c'est plus simple de faire les vérifs globalement après saisie, mais je profite de ce petit développement pour affiner ma pratique du VB et des routines événementielles dans une Form ...
    Et puis, c'est tellement plus interactif, quand ça marche !

    @+ et merci
    FB

  12. #12
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Houah! Des heures de plaisir, quoi!

    Bonne prog!

  13. #13
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    :resolu:
    :wink:

    Bon, ça marche, pas exactement comme a dit Ouskel'n'or, mais enfin ça marche !
    Ouf, quelle galère

    Merci en tous cas

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

Discussions similaires

  1. Problème de Focus sur des TextBox
    Par Oberown dans le forum ASP.NET
    Réponses: 1
    Dernier message: 17/10/2008, 16h18
  2. [C#2.0] problème touche suppr inactive sur des Textbox
    Par Lefauve dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/04/2007, 01h38
  3. focus sur un textbox invisible ?
    Par pellec dans le forum IHM
    Réponses: 17
    Dernier message: 09/06/2006, 16h49
  4. [VB6] Comment faire un update sur des textbox qui sont créés
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 27
    Dernier message: 16/02/2006, 14h52
  5. [C#] Focus sur un textbox
    Par freddyboy dans le forum Windows Forms
    Réponses: 8
    Dernier message: 26/07/2005, 09h07

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