3 votes

Comment formater une valeur en argent (ex. 123 456,50) dans une zone de texte lors de la saisie ?

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 ?

2voto

Cody Gray Points 102261

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.

0voto

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

-1voto

stynx Points 1

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X