Je souhaite formater le contenu de ma boîte de texte pendant la saisie. Je sais que je peux le faire dans LostFocus
mais je veux que cela se fasse pendant que je tape. Quelqu'un a-t-il des suggestions sur la façon de mettre cela en œuvre ?
Réponses
Trop de publicités?Plutôt que d'essayer d'y remédier vous-même, envisagez d'utiliser un contrôle spécialement conçu pour gérer les entrées formatées. Plus précisément, vous avez besoin des éléments suivants MaskedTextBox
contrôle Il s'agit d'une version améliorée de la boîte de texte existante qui permet de définir un "masque" utilisé pour faire la distinction entre les entrées valides et non valides. L'utilisateur reçoit même un retour visuel au fur et à mesure qu'il tape.
Vous devez définir le paramètre Mask
propriété pour indiquer au contrôle comment vous souhaitez que son contenu soit formaté. Toutes les valeurs possibles sont indiquées dans la documentation liée. Pour afficher de l'argent, vous devez utiliser quelque chose comme : $999,999.00
qui représente une valeur monétaire comprise entre 0 et 999999. Ce qui est intéressant, c'est que les caractères monétaires, millièmes et décimaux sont automatiquement remplacés à l'exécution par leurs équivalents spécifiques à la culture, ce qui facilite grandement l'écriture de logiciels internationaux.
Private Sub TBItemValor_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TBItemValor.KeyPress
If (Char.IsDigit(e.KeyChar) = False AndAlso Char.IsControl(e.KeyChar) = False AndAlso Char.IsPunctuation(e.KeyChar) = False) OrElse Not IsNumeric(Me.TBItemValor.Text & e.KeyChar) Then
e.Handled = True
End If
End Sub
Dim strCurrency As String = "" Dim acceptableKey As Boolean = False
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown If (e.KeyCode >= Keys.D0 And e.KeyCode <= Keys.D9) OrElse (e.KeyCode >= Keys.NumPad0 And e.KeyCode <= Keys.NumPad9) OrElse e.KeyCode = Keys.Back Then acceptableKey = True Else acceptableKey = False Fin Si Fin de la sous-substance
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
' Check for the flag being set in the KeyDown event.
If acceptableKey = False Then
' Stop the character from being entered into the control since it is non-numerical.
e.Handled = True
Return
Else
If e.KeyChar = Convert.ToChar(Keys.Back) Then
If strCurrency.Length > 0 Then
strCurrency = strCurrency.Substring(0, strCurrency.Length - 1)
End If
Else
strCurrency = strCurrency & e.KeyChar
End If
If strCurrency.Length = 0 Then
TextBox1.Text = ""
ElseIf strCurrency.Length = 1 Then
TextBox1.Text = "0.0" & strCurrency
ElseIf strCurrency.Length = 2 Then
TextBox1.Text = "0." & strCurrency
ElseIf strCurrency.Length > 2 Then
TextBox1.Text = strCurrency.Substring(0, strCurrency.Length - 2) & "." & strCurrency.Substring(strCurrency.Length - 2)
End If
TextBox1.Select(TextBox1.Text.Length, 0)
End If
e.Handled = True End Sub
@stynx