Я подумал, что уже будет такой вопрос, но мне не повезло в поисках.Я видел вопрос, где кто-то спросил то же самое, но ответом было использование события TextChanged.Это не то, чего я хочу.
TextBox имеет событие для TextChanged, которое происходит после изменения свойства Text.Мне нужно, чтобы мой элемент управления вызвал событие до того, как свойство Text будет фактически изменено для проверки данных.Если он действителен, текст может быть изменен, если он недействителен, текст не изменяется.
Вот что я пробовал:
Public Class TextChangingEventArgs
Inherits System.ComponentModel.CancelEventArgs
Private p_sNewValue As String
Public Sub New()
p_sNewValue = String.Empty
End Sub
Public Sub New(sNewValue As String)
p_sNewValue = sNewValue
End Sub
Public Property NewValue As String
Get
Return p_sNewValue
End Get
Set(value As String)
p_sNewValue = value
End Set
End Property
End Class
Public Class BetterTextBox
Inherits TextBox
Public Event TextChanging(sender As Object, e As TextChangingEventArgs)
Public Overrides Property Text As String
Get
Return MyBase.Text
End Get
Set(value As String)
Dim e As New TextChangingEventArgs(value)
RaiseEvent TextChanging(Me, e)
If e.Cancel = False Then
MyBase.Text = value
End If
End Set
End Property
End Class
Мой в моей форме я обрабатываю TextChangingevent:
Private Sub BetterTextBox1_TextChanging(sender As System.Object, e As TextChangingEventArgs) Handles BetterTextBox1.TextChanging
e.Cancel = Not Regex.IsMatch(e.NewValue, REGEX_PATTERN)
End Sub
Это работает для программной установки значения Text элемента управления BetterTextBox, но не работает при вводе текста в текстовом поле.
Кто-нибудь знает, что мне нужносделать, чтобы заставить это работать?