Auto Tabulation

Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - Modifié par Sinsitrus le 25/08/2014 à 10:38
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 28 août 2014 à 21:06
Salut à tous !

J'ai un petit soucis d'auto tabulation avec le
KeyAscii=13
en VB10

Pouvez-vous m'aider svp ?

J'utilisais ce code sous VB6.0
If KeyAscii = 13 Then KeyAscii = 0: SendKeys "{TAB}", True
If Label1.Caption = "" Then Exit Sub
If InStr(1, Label1.Caption & vbBack, Chr$(KeyAscii)) = 0 Then KeyAscii = 0

et souhaiterais que dans par exemple un module, ce code soit actif sur tout les objets de ma fenêtre.

Merci

----------
OS : Windows 7 Pro 64 Bit
Platforme : Visual Studio 2010

7 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 août 2014 à 12:02
Bonjour,

Pourquoi as-tu besoin de ce SendKeys, je pense que tu utilises une technique qui n'est plus forcément nécessaire.
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
25 août 2014 à 12:14
La tabulation fonctionne mais la touche entrer ne fonctionne pas. Je souhaiterais le faire depuis un module ou une déclaration public avec la touche Entrer.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
Modifié par NHenry le 25/08/2014 à 12:23
Tu n'expliques toujours pas quel est ton but final.
Tu parles de la touche Tab, mais après tu dis que ça fonctionne, mais que la touche Enter te poses des problèmes ...
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
25 août 2014 à 12:32
Non NHenry, la touche Tab fonctionne, mon soucis vient de la touche Enter !
Pour un calcul rapide et une tabulation avec le clavier numérique uniquement, je souhaiterais que la touche Enter fasse la tabulation "aussi" tout comme la touche "Tab", tu me comprends ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 août 2014 à 12:58
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
Modifié par Sinsitrus le 25/08/2014 à 13:41
Merci de ton aide.
Y a t-il moyen de simplifier sans définir le
Me.KeyPress, TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress, TextBox5.KeyPress, 
et lui dire tout control ?

Private Sub MonFocus(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress, TextBox5.KeyPress, TextBox6.KeyPress
        Dim txt As TextBox = CType(sender, TextBox)
        If e.KeyChar = Chr(13) Then GetNextControl(txt, True).Focus()
    End Sub
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 août 2014 à 13:41
Peut être en mettant KeyPreview à true sur la form.
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
25 août 2014 à 16:19
Private Sub MonFocus(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles _
        TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress, TextBox5.KeyPress, TextBox6.KeyPress

        Dim txt As TextBox = CType(sender, TextBox)
        If e.KeyChar = Chr(13) Then GetNextControl(txt, True).Focus()
    End Sub


Malheureusement, je n'arrives toujours pas à éliminer la précision des zone à atteindre par leur noms respectif :
TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress, TextBox5.KeyPress, TextBox6.KeyPress
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
25 août 2014 à 20:33
As-tu essayer avec KeyPreview ?
C'est sensé permettre à la form de recevoir l'événement.
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
26 août 2014 à 13:31
Oui NHenry, le KeyPreview est en True. Merci de ton aide
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
26 août 2014 à 13:45
Je rencontre un petit soucis :

Private Sub MonFocus(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress, TextBox5.KeyPress, TextBox6.KeyPress, TextBox7.KeyPress, TextBox8.KeyPress, TextBox9.KeyPress, TextBox10.KeyPress, TextBox11.KeyPress, TextBox12.KeyPress
        Dim txt As TextBox = CType(sender, TextBox)
        If e.KeyChar = Chr(13) Then GetNextControl(txt, True).Focus()
End Sub


Private Sub MonFocus reconnait le KeyPress, et donc je ne peux plus utiliser séparément le KeyPress d'un TextBox par exemple que contient déjà cette fonction.

Y a t-il moyen de globaliser tout ça svp ?

----------
J'ai débuté VB10 depuis le 25/08/2014
OS            : Windows 7 Pro 64 Bit
Plateforme    : Visual Studio 2010
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
26 août 2014 à 17:33
Heu..... Comprends pas ce que tu veux dire
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
26 août 2014 à 20:28
Je suis à peu près dans le même cas que Whismeril.
Mais peut-être qu'un détour par AddHandler t'aiderait ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
28 août 2014 à 13:47
Bonjour Sinsitrus,

En vb.net, l'envoi de la touche de tabulation s'écrit
SendKeys.Send("{TAB}")
.

Cordialement.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 août 2014 à 14:05
Le but de la discussion est d'évité cette horreur quand il y a une méthode largement plus propre disponible.
De plus si tu a un peu lu cette discussion, le problème qui se pose est maintenant de récupérer l'événement.
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
28 août 2014 à 17:52
Voici deux codes qui s'emmêlent l'un sur l'autre :

Ce code serre à gérer la tabulation par touche clavier "Enter" :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is TextBox Then
                AddHandler ctrl.KeyPress, AddressOf EnterKey
            End If
        Next
    End Sub
    Private Sub EnterKey(ByVal sender As Object, ByVal e As KeyPressEventArgs)
        If e.KeyChar = ChrW(Keys.Enter) Then
            Dim oNextControl As System.Windows.Forms.Control = Me.GetNextControl(CType(sender, Control), True)
            oNextControl.Focus()
        End If
    End Sub


Celui ci sert à gérer la touche KeyPress d'un textbox :
Private Sub TextBox6_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress
        If Not ",.1234567890".Contains(e.KeyChar) And e.KeyChar <> vbBack Then e.KeyChar = Nothing
        Dim Pos As Integer
        Pos = TextBox6.SelectionStart
        If e.KeyChar = "." Then
            e.Handled = True
            TextBox6.Text = TextBox6.Text.Insert(Pos, ",")
            TextBox6.SelectionStart = Pos + 1
        End If
    End Sub


Lorsque la tabulation arrive sur cette zone de texte, à cause de la fonction KeyPress du TextBox6, la tabulation s'arrête et ne prends plus effet. Si je désactive la fonction KeyPress du TextBox6, la tabulation continue.

C'est le problème que je rencontre en ce moment sur cette question, peut être à cause du
KeyPressEventArgs
.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
28 août 2014 à 21:06
Il faut donc que te gères tout ça autrement:
Par exemple:
        Select Case e.KeyChar
            Case ","c, "."c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c, "0"c
                'ici ce que tu as a faire avec ces caractères

            Case "9"c, "5"c, "0"c, "3"c, "6"c, "2"c, "1"c, "-"c, "R"c, "J"c
                'il me semble que tu avais ceux là à autoriser aussi
                'attention il y a des caractères en commun dans les deux séries, il faudra peut faire case spécifique à ces caractères

            Case ChrW(Keys.Enter)
                'ce que tu as à faire avec entrée

            Case ChrW(Keys.Back)
                'à voir si tu autorises ou pas l'action de la touche BackSpace, Sachant que Delete ne passe pas dans KeyPress

            Case Else
                'on annule les autres touches
                e.Handled = True

        End Select

0
Rejoignez-nous