DataGridView でチェックボックスがクリックされた瞬間に処理を走らせたいとき[プログラミング]
(2014-10-17 19:54:19) by shinoda
久しぶりに 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
こんな感じで、自分でチェックボックスの制御(チェックをつけたり外したり)をしつつ、やりたい処理を書けばええわけやね。
ただ、この時気をつけないといかんのが「本来のチェックボックスの制御処理と競合しないように」ってことやね。
具体的には、ExtendDataGridView タスクの画面で「編集を有効にする」のチェックを外してしまわないとダメ。(なので、DataGridView 上でデータの修正をさせたい場合はアウトです(^^;)
こうしないと、CellMouseClick イベントが走った後で、VB が「本来のチェックボックスの中を更新する」処理を行なうので、せっかくつけたチェックが外されちゃったりする。
で、「チェックボックスがチェックされてないのに、値は True 」みたいな変なことになっちゃうんよねえ〜(ちなみに、チェックボックスをクリックした場合だけです。0番セルの「チェックボックスではないところ」をクリックした場合は「本来のチェックボックスの中を更新する」処理は実行されないので問題はありませんたろう。
じゃあ、素敵な VB.NET ライフを!
コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る
Powered by
MT4i 3.0.8