如何为从另一个类引发的事件创建事件监听器

时间:2019-05-15 15:59:09

标签: vb.net events

我正在尝试以我的主要形式为从类(在另一个文件上)引发的事件创建通用侦听器/处理程序。我正在尝试这样做,因为我需要访问我的表单标签(并且此类的实例必须是全局的,因此我不能在我的表单类中声明它)。

最终目标是在实例创建(引发事件)时,在标签的“文本”属性与字符串/属性之间创建数据绑定。

在我的课程StaticScaleDetails上:

Public Class StaticScaleDetails
    Implements System.ComponentModel.INotifyPropertyChanged
    Public Event CreatedNewScale()

    Private _ipAddress As String

    Public Property ipAddress
        Get
            Return _ipAddress
        End Get
        Set(value)
            _ipAddress = value
            RaiseEvent PropertyChanged(Me, New ComponentModel.PropertyChangedEventArgs("ipAddress"))
        End Set
    End Property

    Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) _
    Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

    Public Sub New(ByVal ip As String)
        ipAddress = ip

        RaiseEvent CreatedNewScale()
    End Sub

    Public Sub AssociateHandlers(ByRef ipObject As Object)
        ipObject.DataBindings.Add(New Binding("Text", Me, "ipAddress"))
    End Sub
End Class

我需要某种形式的Form类来处理“ CreatedNewScale()”事件。有什么想法吗?

P.S .:我可能需要创建一个StaticScaleDetails实例列表,所以我宁愿不要仅对特定实例使用处理程序。

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案:我需要一个列表,所以我创建了它,并只为列表对象添加了一个事件处理程序:

在包含一些全局变量的模块中,我声明了

Public StaticScales As New BindingList(Of StaticScaleDetails)

以便可以从任何地方访问它。

我在Main中添加了一个事件处理程序:

Private LastIndex As Integer 'Variable to keep track of the size the list was the last time the event has been triggered

Private Sub ListIsChanged()
    If StaticScales.Count > LastIndex And StaticScales.Count <= 5 Then
        'Console.WriteLine("The list has changed: its size changed from {0} to {1}!", LastIndex, StaticScales.Count)

        SelectLabelsToAssociate()
        LastIndex = StaticScales.Count
    End If
End Sub

在我的主负载上:

LastIndex = 0
AddHandler StaticScales.ListChanged, AddressOf ListIsChanged

可能还有更多的“优雅”解决方案(例如创建一个自定义类,该类仅在添加项目时才触发事件,而不是在列表以任何方式更改时触发事件),但是这种方式可以起作用。