KeyPress en VB.NET 2003 [Résolu]

Signaler
Messages postés
71
Date d'inscription
mardi 26 octobre 2004
Statut
Membre
Dernière intervention
15 avril 2007
-
Messages postés
71
Date d'inscription
mardi 26 octobre 2004
Statut
Membre
Dernière intervention
15 avril 2007
-
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

Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
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 #
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
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
Messages postés
71
Date d'inscription
mardi 26 octobre 2004
Statut
Membre
Dernière intervention
15 avril 2007

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 !
Messages postés
71
Date d'inscription
mardi 26 octobre 2004
Statut
Membre
Dernière intervention
15 avril 2007

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.