所有控件(也包括自定义控件)都具有属性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上找到。