0

したがって、SelectedIndexChanged のイベント ハンドラーを含むコンボボックスがあります。

    Private Sub cmbStatus_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbStatus.SelectedIndexChanged
        DoAnnoyingStuff()
        '....
    End sub

私のフォームの他の場所には、これを行う関数があります(ユーザーの操作の後):

Sub RefreshStatus()
    Dim sel As Int32 = GetNewStatus()
    cmbStatus.SelectedIndex = sel   '<-- fires a SelectedIndexChanged event that I don't need
End Sub

RefreshStatus() でやりたいことは、コンボボックスに表示される選択を変更することですが、DoAnnoyingStuff() は実行しません。どうすればいいですか?

4

2 に答える 2

1

フラグを追加します。したがって、_inChange As Boolean というプライベート クラス フィールドを作成し、RefreshStatus の開始時にフィールドを true に設定し、最後に false に設定します。cmbStatus_SelectedIndexChanged で、_inChange が true かどうかを確認します。その場合は、終了してください。false の場合は、続行して AnnoyingStuff を実行します。

于 2013-02-22T11:01:43.243 に答える
1

イベントを手動で管理し、ハンドラーを有効または無効にすることができます。

AddHandler cmbStatus.SelectedIndexChanged, AddressOf cmbStatus_SelIndexChg
RemoveHandler cmbStatus.SelectedIndexChanged, AddressOf cmbStatus_SelIndexChg    

前述のように、フラグを使用できます。

Dim bRefreshStatus As Boolean = False

Private Sub cmbStatus_SelIndexChg(sender As Object, e As EventArgs) Handles cmbStatus.SelectedIndexChanged
    If Not bRefreshStatus Then DoAnnoyingStuff()
End Sub

Sub RefreshStatus()
    Dim sel As Int32 = GetNewStatus()
    bRefreshStatus = True
    cmbStatus.SelectedIndex = sel
    bRefreshStatus = False
End Sub
于 2013-02-22T11:14:17.667 に答える