すべてのコントロール (カスタム コントロールも含む) にControls
は、そのコントロールの (サブ) コントロールにアクセスできるプロパティがあります。.Item(key)
これで、メソッドを呼び出してテキストボックスを取得できます。次に、フォームまたはクラスでイベント ハンドラーを割り当てることができます。
Dim key As String = "textBoxA" 'Or simply the name of that TextBox in your CustInfo
Dim textboxA As TextBox = CustInfo1.Controls.Item(key)
AddHandler textBoxA.TextChanged, AddressOf mytextchangedhandler
mytextchangedhandler
その TextBox の TextChanged イベントを処理する場所。
個人的には、TextBox の名前またはユーザー コントロールの Controls リストのインデックスのいずれかを知っていることに依存しているため、この方法はあまり好きではありません。
ユーザーコントロールで独自のイベントを作成するオプションを選択することは間違いありません。やり方もとっても簡単!以下、やり方。ユーザー コントロールのコード ビハインドで、イベント宣言を追加する必要があります。
Event MyTextBoxChanged(sender As Object, e As EventArgs)
TextChanged
次に、それを発生させる必要があります。ユーザーコントロールにイベントを実装することでこれを行いTextBoxA
ます(あなたがやりたいと説明したように):
Private Sub TextBoxA_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxA.TextChanged
RaiseEvent MyTextBoxChanged(Me, EventArgs.Empty)
End Sub
MyTextBoxChanged
これで、このイベント ( ) を次のようにフォームに簡単に実装できます。
Private Sub CustInfo1_MyTextBoxChanged(sender As System.Object, e As System.EventArgs) Handles CustInfo1.MyTextBoxChanged
' Do something
End Sub
明らかに、更新されたテキストを取得する必要があります。必要に応じて、新しい (および/または古い値) を提供する独自の EventArgs を作成できます。クラスを継承し、System.EventArgs
いくつかのプロパティを追加するだけです (たとえばOldText
、古いテキスト値をNewText
保持するプロパティと新しいテキスト値を保持するプロパティ)。
Public Class MyEventArgs
Inherits System.EventArgs
Private _OldText As String
Public ReadOnly Property OldText() As String
Get
Return _OldText
End Get
End Property
Private _NewText As String
Public ReadOnly Property NewText() As String
Get
Return _NewText
End Get
End Property
Public Sub New(oldText As String, newText As String)
_OldText = oldText
_NewText = newText
End Sub
End Class
ここで、イベントの定義と発生を変更して、次を使用する必要がありMyEventArgs
ます。
Event MyTextBoxChanged(sender As Object, e As MyEventArgs)
Private Sub TextBoxA_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxA.TextChanged
RaiseEvent MyTextBoxChanged(Me, New MyEventArgs(TextBoxA.Text))
End Sub
また、フォームの実装を変更します。
Private Sub CustInfo1_MyTextBoxChanged(sender As System.Object, e As MyEventArgs) Handles CustInfo1.MyTextBoxChanged
MessageBox.Show(e.Text)
End Sub
イベントの詳細については、お気に入りのMSDNを参照してください。