我有一个A类,其中包含2个声明为
的用户控件Friend WithEvents CustInfo1 As WindowsApplication1.CustInfo
Friend WithEvents ServiceLocation1 As WindowsApplication1.ServiceLocation
两者都有textBoxes。如果custInfo1中textBoxA的值发生变化,那么如何在SeviceLocation1中创建textBoxB的值也会改变
如果有人能帮助我,我将非常感激。
由于
答案 0 :(得分:0)
您需要执行以下操作:
在CustInfo用户控件中,您需要在textBoxA Changed事件中编写代码,该事件从CustInfo用户控件引发事件(例如TextBoxChanged事件)。 RaiseEvent statement
在ServiceLocation用户控件中,为textBoxB.Text
在包含两个用户控件的表单上,在新的CustInfo TextBoxChanged事件中创建代码,并在ServiceLocation1用户控件上设置新属性。
答案 1 :(得分:0)
所有控件(也是自定义控件)都具有属性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列表中的索引。
我肯定会选择在您的usercontrol上创建自己的事件。这很容易做到!下面怎么做。在usercontrol后面的代码中,您必须添加一个事件声明:
Event MyTextBoxChanged(sender As Object, e As EventArgs)
现在我们必须提高它,我们通过在您的用户控件中实现TextChanged
的{{1}}事件来实现这一点(正如您所说的那样):
TextBoxA
现在我们可以在您的表单中简单地实现此事件(Private Sub TextBoxA_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxA.TextChanged
RaiseEvent MyTextBoxChanged(Me, EventArgs.Empty)
End Sub
),如下所示:
MyTextBoxChanged
显然我们仍然需要获取更新的文本,现在我们可以创建我们自己的EventArgs,它将为您提供您想要的新(和/或旧值)。我们只需继承Private Sub CustInfo1_MyTextBoxChanged(sender As System.Object, e As System.EventArgs) Handles CustInfo1.MyTextBoxChanged
' Do something
End Sub
类并添加一些属性(例如包含旧文本值的属性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
有关活动的更多信息,请访问我们最喜欢的地点MSDN。