DataGridView でチェックボックスがクリックされた瞬間に処理を走らせたいとき

久しぶりに VB.NET の話。

DataGridView にチェックボックスを表示するケースってよくあると思うが、そのときの注意点。

チェックボックスにチェックした時点で何もする必要がなければいいんだけど、例えばチェックした、あるいはチェックを外したって時に何かをしたいことってあるよね。
チェックした行のデータの内容によって、複数のボタンの Enabled を制御したいとかね。
そんなとき、CellValueChanged イベントだとちょっと困るんだよな。チェックボックスからフォーカスが外れないとイベントが発生しないし。押して、チェックした瞬間に実行したいんや!!

そんなときは、素直に「DataSetView 上で発生した CellMouseClick イベントを拾う」のが一番簡単だな。

CellMouseClick が発生したら、

Private Sub HogeDataGridView_CellMouseClick(ByVal sender As System.Object, ByVal e As DataGridViewCellMouseEventArgs) Handles HogeDataGridView.CellMouseClick

    ' 明細行クリック時のみ
    If e.RowIndex >= 0 Then
        ' 左端(0セル目)がクリックされた時のみ
        If e.ColumnIndex = 0 Then
            ' 未チェック状態ならチェックに、逆なら未チェックに
            If CBool(HogeDataGridView.CurrentRow.Cells(0).Value) Then
                HogeDataGridView.CurrentRow.Cells(0).Value = False
            Else
                HogeDataGridView.CurrentRow.Cells(0).Value = True
            End If
        End If

' ★この後ろに、色々処理をかけばよろし★

    End If

End Sub

こんな感じで、自分でチェックボックスの制御(チェックをつけたり外したり)をしつつ、やりたい処理を書けばええわけやね。

ただ、この時気をつけないといかんのが「本来のチェックボックスの制御処理と競合しないように」ってことやね。

20141017_vbdsv.jpg

具体的には、ExtendDataGridView タスクの画面で「編集を有効にする」のチェックを外してしまわないとダメ。(なので、DataGridView 上でデータの修正をさせたい場合はアウトです(^^;)
こうしないと、CellMouseClick イベントが走った後で、VB が「本来のチェックボックスの中を更新する」処理を行なうので、せっかくつけたチェックが外されちゃったりする。
で、「チェックボックスがチェックされてないのに、値は True 」みたいな変なことになっちゃうんよねえ~(ちなみに、チェックボックスをクリックした場合だけです。0番セルの「チェックボックスではないところ」をクリックした場合は「本来のチェックボックスの中を更新する」処理は実行されないので問題はありませんたろう。

じゃあ、素敵な VB.NET ライフを!

トラックバック(0)

このブログ記事を参照しているブログ一覧: DataGridView でチェックボックスがクリックされた瞬間に処理を走らせたいとき

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3143

コメントする

このブログ記事について

このページは、shinodaが2014年10月17日 19:54に書いたブログ記事です。

ひとつ前のブログ記事は「創業10周年を先輩に祝ってもらった」です。

次のブログ記事は「「冷やしそば」に変わって、「麻辣麺」が登場」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら