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

Windows Forms Discussion :

[VBExpress2005] Gestion Entrée/Tab et textbox


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 29
    Par défaut [VBExpress2005] Gestion Entrée/Tab et textbox
    Bonjour,

    J'ai créé un formulaire Form1 composé de 2 TextBox et d'un bouton.
    Voici le code condensé :
    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
    Public Class Form1
     
    Private Sub Textbox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Textbox1.KeyUp
      If e.KeyCode = Keys.Enter Then SendKeys.Send("{Tab}")
    End Sub
     
    Private Sub Textbox2_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Textbox2.KeyUp
      If e.KeyCode = Keys.Enter Then SendKeys.Send("{Tab}")
    End Sub
     
    Private Sub Bouton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bouton1.Click
      If Textbox1.Text = Textbox2.Text Then
       MotDePasse = Textbox1.Text
       Me.Close()
      Else
       MsgBox("Erreur de saisie.", MsgBoxStyle.OkOnly)
       Textbox1.Text = ""
       Textbox2.Text = ""
       Textbox1.Focus()
      End If
     End Sub
     
    End Class
    Mon problème : si l'utilisateur se sert de la touche Enter pour quitter la MsgBox, l'évènement Textbox1.KeyUp est déclenché (puisque c'est lui qui reçoit le focus), donc le focus passe au Textbox2.

    J'ai essayé de mettre e.Handled=True avant ou après l'envoie de {Tab}, mais ça ne change rien.

    Je me demandais si il n'y avait pas moyen de tester de quel "endroit" vient l'appui de la touche : si je pouvais déterminer que ma touche "Enter" a été pressée dans ma MsgBox, je pourrais ne pas effectuer l'envoi de {Tab}... Je pensais qu'en testant le type de 'sender' je pourrais faire ça, mais visiblement, c'est toujours un Textbox.
    Du reste, je ne connais son type qu'en faisant un point d'arrêt pour étudier sender dans l'éditeur, car je ne comprends pas comment fonctionne GetType.

    Sinon, comment faire pour supprimer les données du flux du clavier avant de mettre le focus sur Textbox1 ?

    Merci d'avance pour vos conseils.

  2. #2
    Membre éprouvé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Par défaut
    Et si tu test l'origine avec focused

    if textbox.focused then
    ...
    ...
    end if

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 29
    Par défaut
    Citation Envoyé par thierry007
    Et si tu test l'origine avec focused

    if textbox.focused then
    ...
    ...
    end if
    Je vais essayer ce soir, mais a priori, si l'événement KeyUp se déclenche sur le textbox, c'est que le focus est déjà sur lui, donc dans mon test, textbox1.focused sera toujours à True, non ?

  4. #4
    Membre actif Avatar de netomin
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Par défaut
    Pour plus d'informations sur les textbox's svp:
    http://plasserre.developpez.com/v3-4.htm

    Sinon, je te conseille plutôt d'utiliser l'evenement KeyPress pour tes texbox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress
            If e.KeyChar = Chr(13) Then SendKeys.Send("{Tab}")
        End Sub
    Je pense que ton probleme vient du fait de l'ordre de l'éxecution de ton code, après le Enter pour sortir du msgbox ton textbox1 obtient le focus et ensuite l'évènement KeyUp passe le focus à ton textbox2.

    Avec KeyPress tu n'aura plus ce problème.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 29
    Par défaut
    Citation Envoyé par netomin
    Pour plus d'informations sur les textbox's svp:
    http://plasserre.developpez.com/v3-4.htm
    Je ne connaissais pas, merci pour le lien.


    Je pense que ton probleme vient du fait de l'ordre de l'éxecution de ton code, après le Enter pour sortir du msgbox ton textbox1 obtient le focus et ensuite l'évènement KeyUp passe le focus à ton textbox2.

    Avec KeyPress tu n'aura plus ce problème.
    Merci beaucoup. En fait j'avais posé la question pour changer Enter en Tab il y a bien longtemps, et la solution de gérer cela dans KeyUp m'avait été proposée, et cela fonctionne bien dans la majorité des cas. En refaisant récemment une recherche sur le forum, c'est également KeyUp qui est conseillé dès que la question est posée...

    Donc effectivement, j'ai essayé avec KeyPress et cela fonctionne à merveille (c'est même très logique, comme tu l'as expliqué toi-même).

    Donc un grand merci à toi, notemin.

    PS. : Cela dit, pour ma culture personnelle : j'ai un vague souvenir en C (ou Pascal ?) d'une fonction "flush" qui supprimait la pile du clavier. Y a-t-il un équivalent en VB.NET ? (je n'ai rien trouvé dans la doc de VB Express).

  6. #6
    Membre actif Avatar de netomin
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Par défaut
    Donc un grand merci à toi, notemin.
    De rien mais c'est Netomin,

    j'ai un vague souvenir en C (ou Pascal ?) d'une fonction "flush" qui supprimait la pile du clavier. Y a-t-il un équivalent en VB.NET ? (je n'ai rien trouvé dans la doc de VB Express).
    Aucune idée, je ne me souviens pas de cette fonction, il faut que je m'y mette. a+

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

Discussions similaires

  1. [VB.net] liaison entre table et textbox's
    Par collaud_vb dans le forum Windows Forms
    Réponses: 10
    Dernier message: 25/09/2006, 13h27
  2. [C#]Gestion clavier d'un textbox
    Par Mictou dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/09/2006, 23h21
  3. [VB]Pb update entre mon group textbox(i) et ma DataSource
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 31/01/2006, 09h23
  4. [Javascript] appui sur la touche entrée dans une textbox
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/01/2006, 11h19
  5. Gestion des "Tab Order"
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2005, 17h24

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