验证插入符号位置的文本框输入



我有以下代码将十进制输入格式化为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 时,它不允许我这样做,因为小数点后有 2 位数字会取消所有其他用户输入,以确保只能输入 2 位小数。

有没有办法验证这一点以检查数字是在小数点之前还是之后添加的?或者它是否可以根据插入符号位置进行检查?

可能有一种更简单的方法可以在TestBox中验证十进制,但是此代码也用于验证网格和其他控件,因此需要这种格式的内容。

检查SelectionStart属性。

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

上面的代码解释:

如果您尝试添加其他文本的文本在.后已有 2 个字符,请阻止按键。如果在.之前添加,则允许。

最新更新