【VB.NET】データグリッドビューでチェックされた行の背景色を変更する
おはようございます。
昨日に引き続きVB.NETの話し。
せっかくチェックボックスにイベントを仕込んだのでそれをトリガーにして背景色を変更する処理を実装したいと思います。
プログラムは下記のものを流用します。
プログラムの修正
背景色の定義を追加
グローバルの定数として背景色を定義します。
Form1.vb
' 通常時の背景色
Private Const BG_NORMAL = "#FFFFFF"
' 強調時の背景色
Private Const BG_HIGHLIGHT = "#FFE7E7"
' 選択時の背景色
Private Const BG_SELECTED = "#EF9A94"
既存処理の修正
データグリッドビューのセル値が変更(が確定)された際のイベントで背景色を変更します。
Form1.vb
''' <summary>
''' データグリッドビューのセル値が変更(が確定)された際のイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub dgv_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellValueChanged
If (TypeOf dgv(e.ColumnIndex, e.RowIndex) Is DataGridViewCheckBoxCell) Then
Dim chk As DataGridViewCheckBoxCell = dgv(e.ColumnIndex, e.RowIndex)
Dim dgs = New DataGridViewCellStyle()
If (chk.Value = True) Then
dgs.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_SELECTED)
Else
dgs.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_NORMAL)
End If
dgv.Rows(e.RowIndex).DefaultCellStyle = dgs
End If
End Sub
新規イベントの追加
CellMouseEnter、CellMouseLeaveの2つを追加します。
マウスオーバーした際に背景色を変更して強調します。
Form1.vb
''' <summary>
''' データグリッドビューのセルにマウスポインターがフォーカスした際のイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub dgv_CellMouseEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellMouseEnter
' ヘッダーは処理しない
If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then
Dim dgv As DataGridView = CType(sender, DataGridView)
' 背景色を変更する
dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_HIGHLIGHT)
End If
End Sub
''' <summary>
''' データグリッドビューのセルからマウスポインターがフォーカスアウトした際のイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub dgv_CellMouseLeave(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellMouseLeave
' ヘッダーは処理しない
If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then
Dim dgv As DataGridView = CType(sender, DataGridView)
If (dgv(0, e.RowIndex).Value) Then
' 選択された状態に戻す
dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_SELECTED)
Else
' 背景色を戻す
dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_NORMAL)
End If
End If
End Sub
起動してみる
マウスポインターがある行が強調表示されます。
チェックすると選択された行の背景色が変わります。
無事にマウスオーバーで強調表示、チェックボックスにチェックで選択表示ができました。
まとめ
C#と同様、VB.NETでも色々な事ができそうです。
せっかくなので、この後はまたデータベースからデータをひっぱってきたりってのをやろうかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません