入力を検証するカスタム テキスト ボックス コントロールがあります (不要な文字を取り除きます)。これは、コントロールの実装でさらに処理を行いたい場合を除いて、うまく機能します。
例 フォームに 3 つの「specialTextbox」があります。sText1、sText2、および sText3。sText1 と sText2 は意図したとおりに機能します。ただし、sText3 の値が変更されたときにフォーラムで変更を加える必要があるため、ctext changed イベントを処理するフォームにハンドラーがあります。
Private Sub sText3(sender As Object, e As EventArgs) Handles sText3.TextChanged
'do some stuff here
End Sub
ただし、このルーチンは、カスタム テキスト ボックスの OnTextChanged メソッドをオーバーライドするように見えます。MyBase.OnTextChanged への呼び出しを含めようとしましたが、これはまだカスケードアップせず、何をしても、テキスト ボックスに検証の役割を果たさせることができないようです。
本当に単純なものに違いないのですが、私は困惑しています!
これはテキストボックスをオーバーライドするクラスです
Public Class restrictedTextBox
Inherits Windows.Forms.TextBox
Protected validChars As List(Of Char)
Public Sub New(ByVal _validChars As List(Of Char))
MyBase.New()
validChars = _validChars
End Sub
Public Sub setValidChars(ByVal chrz As List(Of Char))
validChars = chrz
End Sub
Protected Overrides Sub OnTextChanged(e As System.EventArgs)
MyBase.OnTextChanged(e)
Dim newValue As String = ""
For Each c As Char In Me.Text.ToCharArray
Dim valid As Boolean = False
For Each c2 As Char In validChars
If c = c2 Then valid = True
Next
If valid Then newValue &= c.ToString
Next
Me.Text = newValue
End Sub
End Class
これはカスタムテキストボックスを持つフォームです
Public Class frmNewForm
Private Sub btnOK_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnOK.Click
MessageBox.Show("the text from the restricted text is: " & txtRestricted.Text)
End Sub
End Class
これは、TextChanged イベントを実装するカスタム テキスト ボックスを含むフォームです。
Public Class frmNewForm2
Private Sub btnOK_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnOK.Click
MessageBox.Show("the text from the restricted text is: " & txtRestricted.Text)
End If
Private Sub txtRestricted_TextChanged(sender As Object, e As EventArgs) Handles txtRestricted.TextChanged
'now that I have implemented this method, the restrictedTextBox.OnTextChanged() doesn't fire - even if I call MyBase.OnTextChanged(e)
'just to be completely clear. the line of code below DOES get executed. But the code in restrictedTextBox.vb does NOT
lblAwesomeLabel.Text=txtRestricted.Text
End Sub
End Class