0

我有一个 A 类,其中包含声明为的 2 个用户控件

Friend WithEvents CustInfo1 As WindowsApplication1.CustInfo
Friend WithEvents ServiceLocation1 As WindowsApplication1.ServiceLocation

两者都有文本框。如果 custInfo1 中 textBoxA 的值发生变化,那么如何使 SeviceLocation1 中的 textBoxB 值也发生变化

如果有人能帮助我,我将不胜感激。

谢谢

4

2 回答 2

0

您需要执行以下操作:

  1. 在 CustInfo 用户控件中,您需要在 textBoxA Changed 事件中编写代码,该事件引发来自 CustInfo 用户控件的事件(例如 TextBoxChanged 事件)。提升事件声明

  2. 在 ServiceLocation 用户控件中,为您的 textBoxB.Text 创建一个公共属性 getter 和 setter

  3. 在包含两个用户控件的窗体上,在新的 CustInfo TextBoxChanged 事件中创建代码并在 ServiceLocation1 用户控件上设置新属性。

于 2012-10-25T22:27:35.337 回答
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 列表中的索引。

我肯定会选择在您的用户控件上创建自己的事件。它甚至很容易做到!下面怎么做。在用户控件背后的代码中,您必须添加一个事件声明:

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上找到。

于 2012-10-25T22:29:31.677 回答