在vb.net中,我有以下代码来验证可输入文本框的可接受字符。
Private Sub txt_mobile_phone_TextChanged(sender As Object, e As EventArgs) Handles txt_mobile_phone.TextChanged
Dim s As String = ""
For Each C As Char In txt_mobile_phone.Text
If (C >= "0" And C <= "9") OrElse (C = " ") OrElse (C = "-") OrElse (C = "+") Then
s &= C
End If
Next
txt_mobile_phone.Text = s
End Sub
问题是,当有人输入无效字符时(例如,感叹号&#39;!&#39;),光标位置会跳到文本字符串的开头,以及所有其他字符在开始时输入。是否有一种方法可以使它忽略无效字符并从字符串末尾进行输入?
如果可能,不使用txt_mobile_phone.SelectionStart = txt_mobile_phone.Text.Length -1
,因为这意味着单击要添加到其中间的字符串中间将中断(目前可能)(
答案 0 :(得分:0)
问题是你在TextChanged上发射一个事件,就是在某事物的中间。出于您的目的,要验证条目,您已获得KeyPress事件,您可以使用e.Handle
来阻止条目。
找到下面的示例,我在我的应用程序中应用它只接受数字,不应接受空格;
Private Sub txt_mobile_phone_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_mobile_phone.KeyPress, _
AcEmpNo.KeyPress
' Accept only numeric values
If (e.KeyChar < Chr(48) OrElse e.KeyChar > Chr(57)) _
AndAlso e.KeyChar <> Chr(8) Then
e.Handled = True
End If
End Sub
如果您不知道代码,也可以使用Char转换器;
e.KeyChar = ChrW(Keys.Space)
希望这有帮助。