我想出了一个解决方案,但解决了我的问题,但我很好奇为什么我最初的方法失败了。我的情况是,如下所述:事件只会引发一次?
我有一个引发事件的一种形式:
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从不执行。同样,第一次列表框的索引改变时,一切正常。为什么是这样?
你需要停止使用*类名*的习惯,frmDgvLb,仿佛它是的一个实例类。当你这样做的时候,有很多方法会丢失,特别是当你多次创建表单或者使用线程时。 – 2013-02-11 17:17:55