2

私の問題を解決する解決策を思いついたのですが、最初のアプローチが失敗した理由に興味があります。私のシナリオは次のとおりです。

イベントを発生させるフォームがあります:

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() が 1 回しか実行されないことでした。リストボックスのその後のすべてのインデックス変更は、イベントを発生させませんか? デバッガーでステップ実行するとき、条件が true と評価されると、デバッガーは RaiseEvent 行にステップし、次に条件ステートメントを閉じる行にステップし、RefreshProfile Sub は実行されません。繰り返しますが、リストボックスのインデックスが初めて変更されると、すべて正常に機能します。どうしてこれなの?

4

1 に答える 1

1

クラスではなく、インスタンスにハンドラーを追加する必要があります。

Public Sub New()
    InitializeComponent()
    AddHandler frmDgvLbInstance.UpdateProfile, AddressOf RefreshProfiles
End Sub
于 2013-02-11T14:55:25.073 に答える