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] Touche de tabulation


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [VB6] Touche de tabulation
    Hello,
    J'ai écris ce code, mais la touche de tabulation ne donne pas son caractère
    ASCII 9 comme indiqué dans l'aide.
    Quelqu'un pourrai m'aider sur ce point.
    Voici 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
    Private Sub txtHoraire_KeyPress(Index As Integer, KeyAscii As Integer)
        If KeyAscii = vbTab Then
            If Len(txtHoraire(Index).Text) < 4 Then
                MsgBox LoadResString(L + 881), _
                vbOKOnly, LoadResString(L + 1)
                txtHoraire(Index).SetFocus
                'selectionne le premier caractère
                txtHoraire(Index).SelStart = 0
                'étend la selection jusqu'au dernier caractaire
                txtHoraire(Index).SelLength = Len(txtHoraire(Index).Text)
            End If
        End If
    End Sub

    [Balise [code] rajouté par DrQ]

  2. #2
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Points : 1 515
    Points
    1 515
    Par défaut
    L'évènement n'est il pas d'abord capturé par ta Form ?

  3. #3
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    c'est normal. l'appuie sur la touche Tab donne le focus à l'objet suivant dans l'ordre des tabindex. Pour gérer cela il existe deux solutions.
    Utiliser l'API GetKeyState dans l'évènement validate ou
    Supprimer / activer les tabstop des autres controles sur les évènements du Focus. Le première méthode est plus simple.

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    j'ajouterais que ce n'est pas VbTab mais VbKeyTab qu'il faut utiliser.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bidou
    c'est normal. l'appuie sur la touche Tab donne le focus à l'objet suivant dans l'ordre des tabindex. Pour gérer cela il existe deux solutions.
    Utiliser l'API GetKeyState dans l'évènement validate ou
    Supprimer / activer les tabstop des autres controles sur les évènements du Focus. Le première méthode est plus simple.
    Merci pour ton info, mais je ne suis pas assez doué pour comprendre ce que tu veux dire. Si tu m’expliques mieux, je comprendrai peut-être. Encore merci pour ta réponse.

    Salutations de Bernard

  6. #6
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 64
    Points
    64
    Par défaut
    Salut,

    J'ai une solution un peu tordue à te suggérer mais elle marche :

    Tu crées une PictureBox minuscule avec une propriété Visible = True pour qu'elle puisse recevoir le Focus. Tu lui donnes une propriété BackColor identique à celle de ta fenêtre pour qu'elle ne soit pas détectable et enfin tu lui attribues une valeur de TabIndex égale à celle de la TextBox + 1.

    Il te suffit alors de placer ton code dans l'événement Got_Focus de cette PictureBox fantôme sans t'occuper de la détection de la touche Tab.

    A+
    HCath

  7. #7
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Bon j'explique. Un appuie sur la touche TAB envoie le focus au contrôle ayant le tabindex directement supérieur. Pour pouvoir gérer la touche Tab dans un textbox tu peux soit :
    - donner la valeur false à la propriété tabstop de tous les contrôles
    - gérer le cas particulier de ton textbox (ce que nous allons voir).

    Comme le contrôle ne prends pas d'évènement clavier sur un appui de la touche TAB il faut travailler sur l'évènement Validate.
    Pour savoir si la touche TAB a été enfoncée, on utilise l'API KeyState.
    Donc, dans ta feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
     
    Private Sub Text1_Validate(Cancel As Boolean)
     
        If GetKeyState(vbKeyTab) < 0 Then
            Text1.Text = Text1.Text & vbTab
            Text1.SelStart = Len(Text1.Text)
            Cancel = True
        End If
     
    End Sub
    Ce qui en clair veut dire que si la touche TAB a été enfoncée, l'objet garde le focus et tu ajoutes le caractère Tab à la chaine.

    voila

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bidou
    Bon j'explique. Un appuie sur la touche TAB envoie le focus au contrôle ayant le tabindex directement supérieur. Pour pouvoir gérer la touche Tab dans un textbox tu peux soit :
    - donner la valeur false à la propriété tabstop de tous les contrôles
    - gérer le cas particulier de ton textbox (ce que nous allons voir).

    Comme le contrôle ne prends pas d'évènement clavier sur un appui de la touche TAB il faut travailler sur l'évènement Validate.
    Pour savoir si la touche TAB a été enfoncée, on utilise l'API KeyState.
    Donc, dans ta feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
     
    Private Sub Text1_Validate(Cancel As Boolean)
     
        If GetKeyState(vbKeyTab) < 0 Then
            Text1.Text = Text1.Text & vbTab
            Text1.SelStart = Len(Text1.Text)
            Cancel = True
        End If
     
    End Sub
    Ce qui en clair veut dire que si la touche TAB a été enfoncée, l'objet garde le focus et tu ajoutes le caractère Tab à la chaine.

    voila
    Un grand merci pour ta solutionça fonctionne impecable.
    Je te montre mo code définitif:
    Private Sub txtHoraire_Validate(Index As Integer, Cancel As Boolean)
    If GetKeyState(vbKeyTab) < 0 Then
    txtHoraire(Index).Text = txtHoraire(Index).Text
    MsgBox LoadResString(L + 881), _
    vbOKOnly, LoadResString(L + 1)
    'selectionne le premier caractère
    'et étend la selection jusqu'au dernier caractaire
    txtHoraire(Index).SelStart = 0
    txtHoraire(Index).SelLength = Len(txtHoraire(Index).Text)
    Cancel = True
    End If
    End Sub

    Salutations de Bernard

  9. #9
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Points : 1 515
    Points
    1 515
    Par défaut
    Pour mettre [Résolu] tu cliques sur le bouton Editer de ton premier message. Ensuite tu modifies le titre en rajoutant [Résolu] puis tu fais Envoyer.

    Voilà

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DrQ
    Pour mettre [Résolu] tu cliques sur le bouton Editer de ton premier message. Ensuite tu modifies le titre en rajoutant [Résolu] puis tu fais Envoyer.

    Voilà
    Merci, je le ferai la prochaine fois! C'est promis

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

Discussions similaires

  1. utilisation de la touche de tabulation dans une JTable
    Par henpower dans le forum Composants
    Réponses: 1
    Dernier message: 28/08/2007, 16h01
  2. Controler les actions de la touche tabulation
    Par lipao17 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/12/2005, 15h52
  3. [JBuilder 9 -X][Config] Touche de tabulation
    Par Righetto Dominique dans le forum JBuilder
    Réponses: 2
    Dernier message: 26/04/2004, 07h04
  4. [VB6] capture de touche par API
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/11/2003, 15h18
  5. [VB6] Touche impr écran
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 12/11/2002, 07h38

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