我想那裏會有這樣的問題,但我沒有任何運氣搜索。我看到有人問同樣的問題,但答案是使用TextChanged事件。這不是我想要的。如何在TextBox上實現TextChanging屬性?
TextBox在Text屬性更改後發生TextChanged事件。在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
我在我的表我處理TextChanging事件:
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
這適用於編程設置BetterTextBox控制的文本價值,但它不當你在文本框中輸入時工作。
有沒有人知道我需要做什麼才能使其工作?
不管這是太煩人了。我只是在TextChanged事件中處理它,並保留最後一個有效值的本地副本。如果該字符串在TextChanged中無效,我只會將它恢復到以前的有效值。 – Nick 2012-02-06 20:46:54