В 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
Проблема заключается в том, что когда кто-то входит недопустимый символ (например, восклицательный знак «!»), Положение курсора, то происходит переход к началу текстовой строки, и все последующие символы вводятся в начале. Есть ли способ сделать это так, чтобы он игнорировал недопустимые символы и продолжал набирать текст с конца строки?
Если это возможно, без использования txt_mobile_phone.SelectionStart = txt_mobile_phone.Text.Length -1
как это означает, что при нажатии на середине строки, чтобы добавить к середине она сломается (который в настоящее время возможно)
Вы не должны обрабатывать событие 'TextChanged' для проверки. Если вы хотите, чтобы пользователь не вводил определенные символы вообще, вы должны обрабатывать «KeyPress», «KeyDown» или «PreviewKeyDown» в зависимости от специфики, и если вы хотите проверить после факта, тогда вы должны обрабатывать 'Validating'. Каждый раз, когда вы устанавливаете свойство «Text», вы сначала уничтожаете то, что было раньше, тем самым теряя позицию каретки, а затем добавляя новый текст. НЕ меняйте «Текст» в обработчике событий «TextChanged». – jmcilhinney
Вы говорите «без использования txt_mobile_phone.SelectionStart = txt_mobile_phone.Text.Length -1'». В любом случае это не сработает, это приведет к поломке программы, как только весь текст будет удален из-за того, что 'SelectionStart' будет 0-1 = -1, и он не может начинаться здесь – David
@jmcilhinney Итак, если я переведу код в 'KeyPress', он решит проблему естественно? –