Sujet : [Vb.Net][1.1] TextBox : format décimal, pavé numérique et virgule
Bonjour,
Me revoici avec mon ami Vb.Net :siffle:
Je souhaite mettre en place un filtrage sur un textBox pour ne saisir que des valeurs décimales.
Visiblement, on ne peut pas définir un format qui permettrait de faire ça simplement. Donc j'ai codé une 'tite méthode pour faire mon filtrage. Elle fonctionne...à ceci près qu'il reste un problème avec la touche '.' du pavé numérique qui est en étroite relation avec les paramètres régionaux de la machine...toujours le même problème.
Le problème est le suivant : impossible d'obtenir la virgule depuis le pavé numérique (j'ai vérifié, je suis bien en format ',' pour le séparateur décimal sur ma machine).
Pour voir, j'ai fait un test : nouveau projet, nouvelle fenêtre, un unique textBox dans la fenêtre, compilation, [s]bourrinnage[/s] essai dans le champ de la touche point du pavé numérique : résultat, le '.' s'affiche et non la ','. Génial...
Donc si jamais quelqu'un à une solution, je suis preneur !
Pour info, voici ma gestion de filtrage :
Private Const K_FILTRE_DOUBLE As String = "1234567890,"
' L'événement exécuter sur les frappes claviers dans mon champ
Private Sub txtDimLong_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDimLong.KeyPress
filtrerFrappe(sender, e, K_FILTRE_DOUBLE)
End Sub
'
' Filtre la frappe dans un champ selon les éléments autorisés.
'
' @param [TextBox] txtCourant Champ concerné par le filtrage.
' @param [KeyPressEventArgs] e L'objet qui permet de contrôler la frappe clavier.
' @param [String] sFiltre Chaîne qui contient la liste des caractères autorisés.
' @return [Boolean] True si caractère autorisé, False sinon.
'
Private Sub filtrerFrappe(ByRef txtCourant As TextBox, ByRef e As System.Windows.Forms.KeyPressEventArgs, ByVal sFiltre As String)
Dim bFiltrer As Boolean = False
Dim cFrappe As String = e.KeyChar
' Vérification que le caractère saisi est autorisé
bFiltrer = (sFiltre.IndexOf(cFrappe) = -1)
' On vérifie que le caractère "," n'a été saisi qu'une seule fois et pas en début de frappe
If cFrappe = "," Then
If txtCourant.Text.IndexOf(cFrappe) <> -1 Then
bFiltrer = True
Else
bFiltrer = (txtCourant.Text.Length = 0)
End If
End If
' Touche backspace autorisée
If cFrappe = ControlChars.Back Then bFiltrer = False
' Autorisation ou interdiction de la frappe
e.Handled = bFiltrer
End Sub
"Keyboard not detected, press a key to continue..."