活动只提出一次?

时间:2013-02-11 14:33:45

标签: vb.net event-handling

我已经找到了解决问题的解决方案但是,我很好奇为什么我的初始方法失败了。我的方案如下所述:

我有一个提升事件的表单:

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永远不会执行。同样,第一次列表框的索引发生变化时,一切运行正常。这是为什么?

1 个答案:

答案 0 :(得分:1)

您必须将处理程序添加到实例,而不是类:

Public Sub New()
    InitializeComponent()
    AddHandler frmDgvLbInstance.UpdateProfile, AddressOf RefreshProfiles
End Sub