我已经找到了解决问题的解决方案但是,我很好奇为什么我的初始方法失败了。我的方案如下所述:
我有一个提升事件的表单:
Public Class frmDgvLb
Public Delegate Sub ProfileChanged()
Public Event UpdateProfile As ProfileChanged
Private Sub lbDgvEdit_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles lbDgvEdit.SelectedIndexChanged
If UpdateHotlist(cmdStr) = True Then
If DgvName = "dgvHotlist" Then
Hotlist.LoadDGV()
ElseIf DgvName = "dgvJobProfile" Then
RaiseEvent UpdateProfile()
End If
Me.Close()
End If
End Sub
End Class
我有另一种形式来定义和处理事件:
Public Class frmGraph
Public Sub New()
InitializeComponent()
AddHandler frmDgvLb.UpdateProfile, AddressOf RefreshProfiles
End Sub
Public Sub RefreshProfiles()
GetProfiles(lbMach.SelectedItem, dtpJobDate.Value)
CreateGraph(dtpJobDate.Value, _machList)
zgc.Refresh()
End Sub
End Class
我的问题是RaiseEvent UpdateProfile()只会执行一次。列表框的所有后续索引更改都不会引发事件?当使用调试器单步执行时,当条件计算为true时,调试器将步入RaiseEvent行,然后步进到关闭条件语句的行,并且RefreshProfile Sub永远不会执行。同样,第一次列表框的索引发生变化时,一切运行正常。这是为什么?
答案 0 :(得分:1)
您必须将处理程序添加到实例,而不是类:
Public Sub New()
InitializeComponent()
AddHandler frmDgvLbInstance.UpdateProfile, AddressOf RefreshProfiles
End Sub