我正在尝试以我的主要形式为从类(在另一个文件上)引发的事件创建通用侦听器/处理程序。我正在尝试这样做,因为我需要访问我的表单标签(并且此类的实例必须是全局的,因此我不能在我的表单类中声明它)。
最终目标是在实例创建(引发事件)时,在标签的“文本”属性与字符串/属性之间创建数据绑定。
在我的课程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实例列表,所以我宁愿不要仅对特定实例使用处理程序。
答案 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
可能还有更多的“优雅”解决方案(例如创建一个自定义类,该类仅在添加项目时才触发事件,而不是在列表以任何方式更改时触发事件),但是这种方式可以起作用。