2019-09-20に投稿

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

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

ではでは。

Originally published at www.doraxdora.com

doraxdora

IT関係の仕事をしています/1985年生まれの東京在住/便利なサービスやツール漁りや料理などが好き/2017年~ブログやってます/自分でサービスとか作ってリリースしたい/何かありましたらお気軽にDMどうぞ

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント