KeyPress en VB.NET 2003

Résolu
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007 - 8 févr. 2007 à 10:16
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007 - 8 févr. 2007 à 14:54
Bonjour à tous d'un débutant,
Je n'arrive pas à traduire le code suivant en code VB.NET 2003

Private Sub Text14_KeyPress(KeyAscii As Integer)
' 8 = TOUCHE RET ARR ; 46 TOUCHE POINT DECIMAL ;44 TOUCHE VIRGULE
    If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then
    If KeyAscii = 44 Then
        If InStr(1, Text14.Text, ",") Then KeyAscii = 0
    ElseIf KeyAscii = 46 Then
        If InStr(1, Text14.Text, ",") Then
            KeyAscii = 0
        Else
            KeyAscii = 44
        End If
    Else
        KeyAscii = 0
    End If
End If
End Sub
Ce petit code autorise seulement le clavier numerique,  il autorise aussi le retour arriere et redetermine la touche clavier numerique 46 (le point) par la touche virgule(44) il evite dans la TextBox que le chiffre commence par une virgule.
Je pense que j'ai rien oublier... ah si
Merci pour votre aide.
A bientôt j'espére.

5 réponses

hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
8 févr. 2007 à 14:10
Heu... je viens de retester, en copiant collant ton code au cas où tu aurais fait une erreur de recopiage , et ça marche.
J'ai juste remarqué un soucis, c'est que j'avais oublié de replacer la selection de la textbox à la fin du texte, lors de l'accés à celui ci.
Change donc ça :
Else
e.Handled =
True
Text16.Text += Chr(44)

par

e.Handled =

True
Text16.Text += Chr(44)
Text16.SelectionStart = Text16.TextLength

Je ne vois par contre pas pourquoi tu peux ajouter plusieurs virgules, ce n'est pas le cas quand je teste...

Hvb aka Batto
bato.ltd at gmail.com
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 févr. 2007 à 11:57
Regarde si ceci te convient :
Je l'ai fais avec VB2005, mais je pense que ça passe aussi avec VB2003

Private Sub Text14_KeyPress(ByVal sender As Object, ByVal e
As System.Windows.Forms.KeyPressEventArgs) Handles
Text14.KeyPress

        If e.KeyChar <> Microsoft.VisualBasic.ChrW(8) And Not
Char.IsDigit(e.KeyChar) Then
                If e.KeyChar = ","c Then
                        If Text14.Text.IndexOf(","c, 0) >= 0 Then e.Handled = True
                ElseIf e.KeyChar = "."c Then
                        If Text14.Text.IndexOf(","c, 0) >= 0 Then
                                e.Handled = True
                        Else
                                e.KeyChar = ","c
                        End If
                Else
                        e.Handled = True
                End If
        End If

End Sub

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
8 févr. 2007 à 12:05
comme je t'ai repondu en privé (testé sous vb2005 option strict):

If Asc(e.KeyChar) <> 8
And (Asc(e.KeyChar) < 48
Or Asc(e.KeyChar) > 57)
Then

If Asc(e.KeyChar) = 44
Then

If TextBox16.Text.IndexOf(
",") >= 0
Then e.Handled =
True

ElseIf Asc(e.KeyChar) = 46
Then

If TextBox16.Text.IndexOf(
",") >= 0
Thene.Handled =

True

Elsee.KeyChar = Chr(44)

End
If

Elsee.Handled =

True

End
If

End
If
Et si en VB.NET 2003, e.KeyChar = Chr(44)  leve une exception de lecture seule, alors ruse :
 remplace :
Else

e.KeyChar = Chr(44)

'ici erreur 'La propriété "KeyChar" et ReadOnly'

End
If

par

Else

e.Handled=True
TextBox16.Text+=Chr(44)

End
If

Hvb aka Batto
bato.ltd at gmail.com
0
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007
8 févr. 2007 à 13:44
Bonjour et merci de vos réponses,
Pour Casy ça bloque à  e.KeyChar = ","c 'La propriété "KeyChar" et ReadOnly'

Pour hvb pas d'erreur mais j'arrive à inscrire plusieurs point à la suite au lieu d'une seule virgule ! donc ne fonctionne pas. Normalement quand j'appuis sur le point il devrait avoir une virgule pas de point et qu'une seule.

Private
Sub Text16_KeyPress(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.KeyPressEventArgs)
Handles Text16.KeyPress
If Asc(e.KeyChar) <> 8
And (Asc(e.KeyChar) < 48
Or Asc(e.KeyChar) > 57)
Then
If Asc(e.KeyChar) = 44
Then
If Text16.Text.IndexOf(",") >= 0
Then e.Handled =
True
ElseIf Asc(e.KeyChar) = 46
Then
If Text16.Text.IndexOf(",") >= 0
Then
e.Handled =
True
Else
e.Handled =
True
Text16.Text += Chr(44)

'e.KeyChar = Chr(44)
End
If
Else
e.Handled =
True
End
If
End
If

Merci pour votre aides j'en  n'ai encore besoin !
0

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

Posez votre question
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007
8 févr. 2007 à 14:54
Bonjour,
Je viens de faire un autre projet et bien... ça fonctionne mais pas dans mon projet que je veux mettre à jour ! enfin il faut peut-être que je change tous les TextBox(s) par ce qu'il  inter-agisse avec Text16_TextChanged
Exp.: quand j'efface avec retour arriere j'efface aussi le texte des autres TextBox(s) il va peut-être que je revois le code!
voilà ce qu'il y a :

Private
Sub Text16_TextChanged(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Text16.TextChanged

' PAHT
If Text16.Text = "" Then Text15.Text "" : Text13.Text "" : Text12.Text = "" : Text11.Text = "" : Text10.Text = "" : Text9.Text = ""

If Len(Text16.Text) < 1
Then
Exit
Sub
Text16.Text = Trim(Text16.Text)
'enleve les espaces droite et gauche
If Mid(Text16.Text, 1, 1) = ","
Then Text16.Text = ""

On
Error
GoTo fin1
Text15.Text =
CStr((
CDbl(Text16.Text) * 100) / (100 -
CDbl(Text14.Text)))
Text11.Text =
CStr(
CDbl(Text13.Text) -
CDbl(Text15.Text))
Text9.Text =
CStr((
CDbl(Text15.Text) -
CDbl(Text16.Text)) /
CDbl(Text13.Text) * 100)
Text10.Text =
CStr(
CDbl(Text15.Text) -
CDbl(Text16.Text))
Text12.Text =
CStr(
CDbl(Text13.Text) /
CDbl(Text16.Text))
fin1:

End
Sub
Je vais changer une series de TextBox ...c'est parti
Merci de votre aide.
0
Rejoignez-nous