2017-08-16 88 views
0

我有以下代码将十进制输入格式化为TextBox在插入位置验证文本框输入

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 

这一切工作正常,但是,如果我输入一个值到TextBox,例如10.50,当我试着删除第一个0并将其值改为11.50时,它不允许我这样做,因为在取消所有其他用户输入的小数点后面有两位数,以确保只有两位小数可以输入。

有没有一种方法可以验证此检查数字是否在小数点前后添加?或者如果它可以根据插入位置检查它?

TestBox中可能有一种更简单的方法来验证小数,但是此代码也用于验证网格和其他控件,因此需要使用此格式的某些内容。

回答

0

检查SelectionStart属性。

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

上面的代码解释:

如果文本已经.后2个字符你想添加另一个,防止按键。如果在.之前添加,则允许。