vb.net - 如何为从另一个类引发的事件创建事件侦听器
问题描述
我正在尝试以我的主要形式为从类(在另一个文件上)引发的事件创建一个通用的侦听器/处理程序。我正在尝试这样做,因为我需要访问我的表单标签(并且这个类的实例必须是全局的,所以我不能在我的表单类中声明它)。
最终目标是在创建实例时(引发事件)在标签的“文本”属性和字符串/属性之间创建 DataBindings。
在我的课上 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
我需要从我的表单类中获取一些方法来处理“CreatedNewScale()”事件。有任何想法吗?
PS:我可能需要创建一个StaticScaleDetails 实例列表,所以我宁愿不只对特定实例使用处理程序。
解决方案
最后,我找到了解决方案:我需要一个列表,所以我创建了它并只为列表对象添加了一个事件处理程序:
在包含一些全局变量的模块中,我声明
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
可能有更多“优雅”的解决方案(例如创建一个自定义类,它仅在添加项目时触发事件,而不是在以任何方式更改列表时触发事件),但这样它就可以工作。
推荐阅读
- php - 循环多维数组
- php - php curl 在尝试搜索关键字时返回空字符串
- sql - 将每个 ID 的插入限制为 6 行
- apache-flink - 如何通过 rest API “在 YARN 上运行单个 Flink 作业”?
- c++ - 确定操作系统是 32 位还是 64 位
- javascript - NodeJS'express.use'调用顺序不一致
- scala - try/catch/finally 是 scala 中的表达式吗?如果是,最终如何以及何时执行?
- hibernate - org.hibernate.dialect.H2Dialect 不能转换为 org.hibernate.dialect.Dialect
- http - Elm 0.19:使用 elm/http 2.0.0 接收 BadStatus 时如何获取请求正文
- python - QGraphicsItem在移动后没有留在原地