2017-08-16 1 views
0

J'ai le code suivant pour formater la saisie décimale dans un TextBox.Valider l'entrée TextBox à l'emplacement du curseur

If Char.IsDigit(e.KeyChar) OrElse e.KeyChar = "."c Then 
    If e.KeyChar = "."c Then 
     If txtPrice.Text.Contains("."c) Then 
      e.Handled = True 
     End If 
    ElseIf Char.IsDigit(e.KeyChar) Then 
     If txtPrice.Text.Contains("."c) Then 
      Dim value As String = txtPrice.Text 
      Dim units As String = value.Substring(value.IndexOf("."c) + 1) 

      If units.Length >= 2 Then 
      e.Handled = True 
      End If 
     End If 
    End If 
ElseIf e.KeyChar <> Chr(8) Then 
    e.Handled = True 
End If 

Tout cela fonctionne très bien, mais si j'entre une valeur dans la TextBox, par exemple 10.50, quand j'essaie alors de supprimer le premier 0 et de changer la valeur à 11.50, il ne me le permettra pas, car il y a 2 chiffres après le point décimal qui annule toute autre entrée de l'utilisateur, pour s'assurer que seulement 2 décimales peut être entré.

Y at-il un moyen de valider cela pour vérifier si le chiffre est ajouté avant ou après la virgule? Ou s'il peut le vérifier en fonction de l'emplacement du curseur?

Il existe probablement un moyen plus simple de valider la décimale dans un TestBox, mais ce code est également utilisé pour la validation de grilles et d'autres contrôles, donc quelque chose dans ce format est nécessaire.

Répondre

0

Vérifiez la propriété SelectionStart.

If units.Length >= 2 AndAlso txtPrice.SelectionStart > txtPrice.Text.IndexOf(".") Then 
    e.Handled = True 
End If 

code ci-dessus explique:

Si le texte déjà 2 caractères après le . que vous essayez d'ajouter une autre, éviter keypress. Si vous ajoutez avant le . puis autoriser.