【VB.NET】データグリッドビューでチェックされた行の背景色を変更する

2017年12月20日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でも色々な事ができそうです。
せっかくなので、この後はまたデータベースからデータをひっぱってきたりってのをやろうかと思います。

ではでは。

スポンサーリンク


関連するコンテンツ

2017年12月20日VB.NET,開発VB.NET,VisualStudio,サンプルプログラム

Posted by doradora