文本框验证,光标跳到文本的开头

时间:2016-08-05 09:06:11

标签: vb.net string validation textbox

在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,因为这意味着单击要添加到其中间的字符串中间将中断(目前可能)(

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)

希望这有帮助。