我想出了一個解決方案,但解決了我的問題,但我很好奇爲什麼我最初的方法失敗了。我的情況是,如下所述:事件只會引發一次?
我有一個引發事件的一種形式:
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