チェックボックスでのクリックイベントの実行順序を示す簡単な例を次に示します。
Private Sub CheckBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseDown
Dim a As Integer = 1
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
Dim a As Integer = 2
End Sub
Private Sub CheckBox1_Clicked(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.Click
Dim a As Integer = 3
End Sub
Private Sub CheckBox1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseClick
Dim a As Integer = 4
End Sub
Private Sub CheckBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseUp
Dim a As Integer = 5
End Sub
各宣言にブレークポイントを設定すると、CheckChanged の前に MouseDown イベントだけが発生することがわかります。つまり、ユーザーがチェックボックスをクリックしたかどうかを確認するには、CheckBox.MouseDown サブでイベントを発生させる必要があります。ユーザーがこのチェックボックスをクリックすると、このイベントが発生することに注意してください。マウスを押したままマウスをドラッグしても、check changed イベントは更新されません。これは、MouseUp サブでフォローアップ イベントを発生させてフラグをクリアする必要があることを意味します。
それを処理する 1 つの方法は次のようになります。
Private blIsUserClick As Boolean
Private Sub CheckBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseDown
blIsUserClick = True
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
If blIsUserClick Then
'Is a user click event
Else
'Not a user click event
End If
End Sub
Private Sub CheckBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseUp
blIsUserClick = False
End Sub