【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でも色々な事ができそうです。
せっかくなので、この後はまたデータベースからデータをひっぱってきたりってのをやろうかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません