У меня есть пользовательский компонент текстового поля (наследуется от system.windows.forms.textbox), который я создал в vb.net (2005), который обрабатывает ввод числовые данные. Это работает хорошо.Предотвращение проверки/проверки событий при запуске в пользовательском текстовом поле - vb.net
Я хотел был бы подавить проверенные и подтвержденные события от стрельбы, если число не изменилось. Если пользователь вводит табуляцию через форму и вкладки из текстового поля, активируются проверенные/проверенные события.
Я думал, что текстовое поле может кэшировать значение и сравнивать его с тем, что указано в свойстве text. Если они отличаются друг от друга, я бы хотел, чтобы события проверки/проверки выполнялись. Если они одинаковы, ничто не увольняется.
Я не могу понять, как подавить событие. Я попытался переопределить событие OnValidating. Это не сработало.
Любые идеи?
Update:
Вот пользовательский класс текстовое поле. Идея заключается в том, что я хочу кэшировать значение текстового поля в событии проверки. После того, как значение кэшируется, в следующий раз, когда пользователь введет флажок, проверяющее событие проверит, не отличается ли _Cache от .Text. Если это так, я хотел бы поднять проверяющее событие в родительскую форму (а также проверенное событие). Если _cache тот же, то я не хочу поднять событие в форму. По сути, текстовое поле будет работать так же, как и в обычном текстовом поле, за исключением того, что проверяющий и проверенный метод поднимаются только в форму при изменении текста.
Public Class CustomTextBox
#Region "Class Level Variables"
Private _FirstClickCompleted As Boolean = False 'used to indicate that all of the text should be highlighted when the user box is clicked - only when the control has had focus shifted to it
Private _CachedValue As String = String.Empty
#End Region
#Region "Overridden methods"
Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
'check to see if the control has recently gained focus, if it has then allow the first click to highlight all of the text
If Not _FirstClickCompleted Then
Me.SelectAll() 'select all the text when the user clicks a mouse on it...
_FirstClickCompleted = True
End If
MyBase.OnClick(e)
End Sub
Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
_FirstClickCompleted = False 'reset the first click flag so that if the user clicks the control again the text will be highlighted
MyBase.OnLostFocus(e)
End Sub
Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
If String.Compare(_CachedValue, Me.Text) <> 0 Then
MyBase.OnValidating(e)
End If
End Sub
Protected Overrides Sub OnValidated(ByVal e As System.EventArgs)
_CachedValue = Me.Text
MyBase.OnValidated(e)
End Sub
#End Region
End Class
Update 2:
Благодаря xpda, решение простое (так просто, что я не понял :)). Заменить OnValidating и OnValidated с (также логическим значением для записи состояния требуется):
Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
If String.Compare(_CachedValue, Me.Text) <> 0 Then
_ValidatingEventRaised = True
MyBase.OnValidating(e)
End If
End Sub
Protected Overrides Sub OnValidated(ByVal e As System.EventArgs)
If Not _ValidatingEventRaised Then Return
_CachedValue = Me.Text
_ValidatingEventRaised = False
MyBase.OnValidated(e)
End Sub
Я не понимал, что вы имели в виду, но теперь я думаю, что у меня есть это, и это так просто. Благодаря! – Bluebill