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.NET Discussion :

TextBox à un autre avec la touche "enter"


Sujet :

VB.NET

  1. #1
    vb
    vb est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 83
    Points : 93
    Points
    93
    Par défaut TextBox à un autre avec la touche "enter"
    Bonjour,
    Je désire utiliser la touche "enter" au lieux de la touche tab pour passer d'un TextBox à l'autre, comment éléminer le "beep sonore",? voici mon code qui fontionne bien à part le "beep"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
     
            If e.KeyCode = Keys.Enter Then
                TextBox2.Select()
            End If
        End Sub
    Dans vb je faisais dans keyPress
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If KeyAscii = 13 Then KeyAscii = 0
    Mais ici je cale

    Merci à vous
    vb

  2. #2
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Bonjour,

    C'est Focus() à utiliser plutot que Select() je pense.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
     
            If e.KeyCode = Keys.Enter Then
                TextBox2.Focus()
            End If
        End Sub

  3. #3
    vb
    vb est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    Bonjour,
    J'ai essayé
    Le beep est toujours là
    vb

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Effectivement le beep est toujours la

    Pour contrer ce problème j'ai opté pour une prefiltrage des messages Windows :
    Je l'ai codé en C# mais je te livre la chose traduite (j'espère correctement) en VB.NET :

    Petite classe de prétraitement des messages

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Public Class MyMessageFilter 
        Implements IMessageFilter 
    Private _Form As Form 
        Public Property Form() As Form 
            Get 
                Return _Form 
            End Get 
            Private Set(ByVal value As Form) 
                _Form = value 
            End Set 
        End Property 
     
        Public Sub New(ByVal form As Form) 
            Me.Form = form 
        End Sub 
     
        Public Function PreFilterMessage(ByRef m As Message) As Boolean 
            If Me.Form IsNot Nothing AndAlso Me.Form.ActiveControl IsNot Nothing Then 
                If m.Msg = 256 Then 
                    ' code d'une touche appuyé 
                    If m.WParam.ToInt32() = 13 Then 
                        Dim textbox As TextBox = TryCast(Form.ActiveControl, TextBox) 
     
                        If textbox IsNot Nothing AndAlso (textbox.Multiline = False OrElse (textbox.Multiline = True AndAlso textbox.AcceptsReturn = False)) Then 
                            ' va chercher le prochain control 
                            Dim nextControl As Control = Form.GetNextControl(textbox, True) 
     
                            If nextControl IsNot Nothing Then 
                                nextControl.Focus() 
                            End If 
     
                            Return True 
                        End If 
                    End If 
                End If 
            End If 
     
            Return False 
        End Function 
    End Class
    Dans la Form :

    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
    24
    25
    26
     
    ' La form sur laquelle on travaille 
     
    Public Partial Class Form1 
        Inherits Form 
        Private filter As MyMessageFilter 
     
        ''' <summary> 
        ''' Constructeur 
        ''' </summary> 
     
        Public Sub New() 
            InitializeComponent() 
     
     
            filter = New MyMessageFilter(Me) 
            Application.AddMessageFilter(filter) 
     
            AddHandler Me.Load, AddressOf Form1_Load 
        End Sub 
     
        Protected Overloads Overrides Sub OnClosed(ByVal e As EventArgs) 
            Application.RemoveMessageFilter(filter) 
            MyBase.OnClosed(e) 
        End Sub 
    End Class
    La touche enter ne Beep plus et se comporte comme une tabulation.
    Ca ne prend en compte que les textboxs (mais pas les multilignes sauf celle n'acceptant pas le caractères Return).
    Cela s'applique a toute les textboxs de ta Form.

  5. #5
    vb
    vb est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    Bonjour,
    Merci pour votre code
    J'ai juste deux petits message d'erreur
    Je crée une classe selon votre premier code
    juste sur -->IMessageFilter
    vb.net me dis
    MyMessageFilter doit implémenter'Function PreFiterMessage'ByRef m as message) as Boolean'pour l'interface System.Windows.Forms.IMessageFilter'
    Dans le deuxième code après Form1_Load VB.net me dis que
    Form1_Load n'est pas déclaré.
    Les classes et moi je suis un peu perdu dans ce domaine
    Merci de me donner autant d'attention.
    vb

  6. #6
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    J'ai juste deux petits message d'erreur
    Je crée une classe selon votre premier code
    juste sur -->IMessageFilter
    vb.net me dis MyMessageFilter doit implémenter'Function PreFiterMessage'ByRef m as message) as Boolean'pour l'interface System.Windows.Forms.IMessageFilter'
    Désolé je ne vois pas... Il y aurait une star de VB.NET qui pourrait te répondre ?

    Dans le deuxième code après Form1_Load VB.net me dis que Form1_Load n'est pas déclaré.
    Le deuxième code est à placer dans ta Form. Form1 est un exemple que j'ai pris. Ta Form doit surement avoir un autre nom.

  7. #7
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Voilà code modifié, en parlant d'un formulaire nommé Form1
    Code VB.Net : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Public Class Form1
     
        Private _Filter As MyMessageFilter
     
        Public Sub New()
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
            _Filter = New MyMessageFilter(Me)
            Application.AddMessageFilter(_Filter)
        End Sub
     
        Protected Overloads Overrides Sub OnClosed(ByVal e As EventArgs)
            Application.RemoveMessageFilter(_Filter)
            MyBase.OnClosed(e)
        End Sub
     
    End Class
     
    Public Class MyMessageFilter
        Implements IMessageFilter
     
        Private _Form As Form
        Public Property Form() As Form
            Get
                Return _Form
            End Get
            Private Set(ByVal value As Form)
                _Form = value
            End Set
        End Property
     
        Public Sub New(ByVal form As Form)
            Me.Form = form
        End Sub
     
        Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
            If Me.Form IsNot Nothing AndAlso Me.Form.ActiveControl IsNot Nothing Then
                If m.Msg = 256 Then
                    ' code d'une touche appuyé 
                    If m.WParam.ToInt32() = 13 Then
                        Dim textbox As TextBox = TryCast(Form.ActiveControl, TextBox)
     
                        If textbox IsNot Nothing AndAlso (textbox.Multiline = False OrElse (textbox.Multiline = True AndAlso textbox.AcceptsReturn = False)) Then
                            ' va chercher le prochain control 
                            Dim nextControl As Control = Form.GetNextControl(textbox, True)
     
                            If nextControl IsNot Nothing Then nextControl.Focus()
     
                            Return True
                        End If
                    End If
                End If
            End If
     
            Return False
        End Function
     
    End Class

  8. #8
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Merci la star du VB
    Il était ou mon souci de convertion ?

  9. #9
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par Samoteph Voir le message
    Merci la star du VB
    Il était ou mon souci de convertion ?
    Star du VB faut pas exagérer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler Me.Load, AddressOf Form1_Load
    Est inutile, c'est déjà le comportement par défaut.

    Ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function PreFilterMessage(ByRef m As Message) As Boolean
    Le mien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
    Quand tu implémente une Interface, tu spécifies après le prototype de la méthode implémentée, la méthode de l'interface correspondante, car tu n'es pas obliger de la nommer pareil (exemple j'aurais pu aussi écrire ça)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function Toto(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage

  10. #10
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    @Sehnsucht

    Quand tu implémente une Interface, tu spécifies après le prototype de la méthode implémentée, la méthode de l'interface correspondante, car tu n'es pas obliger de la nommer pareil (exemple j'aurais pu aussi écrire ça)
    Ouaaaa c'est puissant et verbeux le VB

    @vb

    Alors avec la convertion plus soignée de Sehnsucht est-ce que ma petite astuce fonctionne ? (Ca marche en C#, y a pas de raison )

  11. #11
    vb
    vb est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 83
    Points : 93
    Points
    93
    Par défaut
    Bonjour,
    Merci à vous pour avoir contribué à résoudre ma question et par la même occasion d'en savoir un peu plus.
    Je mets ma question ...résolu
    Bien à vous
    vb

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

Discussions similaires

  1. Passer d'une zone à l'autre avec la touche enter
    Par claude dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 11/01/2012, 10h20
  2. [XL-2007] Passer d'un textbox à l'autre avec la touche Tab
    Par formabox dans le forum Excel
    Réponses: 2
    Dernier message: 01/12/2011, 11h41
  3. Réponses: 4
    Dernier message: 18/10/2007, 15h16

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