不同控件之间的事件检测vb

时间:2012-10-25 21:29:52

标签: vb.net oop

我有一个A类,其中包含2个声明为

的用户控件
Friend WithEvents CustInfo1 As WindowsApplication1.CustInfo
Friend WithEvents ServiceLocation1 As WindowsApplication1.ServiceLocation

两者都有textBoxes。如果custInfo1中textBoxA的值发生变化,那么如何在SeviceLocation1中创建textBoxB的值也会改变

如果有人能帮助我,我将非常感激。

由于

2 个答案:

答案 0 :(得分:0)

您需要执行以下操作:

  1. 在CustInfo用户控件中,您需要在textBoxA Changed事件中编写代码,该事件从CustInfo用户控件引发事件(例如TextBoxChanged事件)。 RaiseEvent statement

  2. 在ServiceLocation用户控件中,为textBoxB.Text

  3. 创建公共属性getter和setter
  4. 在包含两个用户控件的表单上,在新的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