Asc 函数是一个旧的 VB6 函数,在编写新的 .NET 代码时应该避免使用它。在这种情况下,您可以比较字符以查看它是否在某个范围内,如下所示:
If e.KeyChar <> ControlChars.Back Then
If (e.KeyChar < "0"c) Or (e.KeyChar > "9"c) Then
e.Handled = True
End If
End If
但是,我建议简单地列出有效字符,如下所示:
e.Handled = ("0123456789.".IndexOf(e.KeyChar) = -1)
至于检查多个小数点,你可以在按键事件中做一些事情,像这样:
If e.KeyChar = "."c Then
e.Handled = (CType(sender, TextBox).Text.IndexOf("."c) <> -1)
ElseIf e.KeyChar <> ControlChars.Back Then
e.Handled = ("0123456789".IndexOf(e.KeyChar) = -1)
End If
然而,虽然能够过滤掉无效的击键是件好事,但这样做存在很多问题。例如,即使进行了所有这些检查,仍然允许以下条目,即使它们很可能都应该是无效的:
另一个大问题是您的代码将依赖于文化。例如,在欧洲,通常使用逗号作为小数点。出于这些原因,如果可能,我建议在Validating 事件中简单地使用Decimal.TryParse,如下所示:
Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
Dim control As TextBox = CType(sender, TextBox)
Dim result As Decimal = 0
Decimal.TryParse(control.Text, result)
control.Text = result.ToString()
End Sub