DataGridViewの文字色に関して

解決


misamisa  2012-08-10 09:52:41  No: 147735  IP: 192.*.*.*

環境:Visual Basic 2008

DataGridViewのセルの背景色を変更しておりますが、その際に、1行置きに変更するパターンと、
1列そのまま変更するパターンと、2つの記述をしています。

その際に、列の背景色の方を前面(優先)したいと考えていますがどのように記述すれば良いでしょうか?

記述する順番かと思い、下記のような記述をしてみましたがNGでした。。

《現在の記述内容》

G_AAA.AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue
G_AAA.Columns(7).DefaultCellStyle.BackColor = Color.LightGray 

初歩的な質問で申し訳ありませんが、教えて下さい。

編集 削除
魔界の仮面弁士  2012-08-10 11:10:10  No: 147736  IP: 192.*.*.*

列単位のセルスタイルは、行スタイルよりも先に処理されるので、
求めている結果にはならないと思います。


> 記述する順番かと思い、下記のような記述をしてみましたがNGでした。。
セルスタイルの処理順は常に固定的です。下記の図をご覧ください。
http://msdn.microsoft.com/ja-jp/library/1yef90x0%28VS.80%29.aspx


> 初歩的な質問で申し訳ありませんが、教えて下さい。
# 質問内容が初歩的かどうかを、質問者側自身が判断するのは
# 個人的には違和感を覚えるのですが、それはひとまず置いといて…。

今回の場合は、イベントを用いた方が良いでしょう。



Public Class Form1
    Private WithEvents dgv As New DataGridView()
    Private Sub Form1_Load() Handles Me.Load
        dgv.AllowUserToAddRows = False
        dgv.RowCount = 30
        dgv.ColumnCount = 5
        dgv.Dock = DockStyle.Fill

        dgv.DefaultCellStyle.BackColor = Color.AliceBlue
        dgv.RowsDefaultCellStyle.BackColor = Color.YellowGreen
        dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue
        dgv.Columns(2).DefaultCellStyle.BackColor = Color.LightGray

        Controls.Add(dgv)
    End Sub

    Private Sub dgv_CellPainting(ByVal sender As Object, _
        ByVal e As DataGridViewCellPaintingEventArgs) Handles dgv.CellPainting


        '現在の列に、列スタイルが設定されているかどうかを確認する
        If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 AndAlso _
            dgv.Columns(e.ColumnIndex).HasDefaultCellStyle Then

            '列に背景色が設定されていれば、それを適用する
            Dim c As Color = dgv.Columns(e.ColumnIndex).InheritedStyle.BackColor
            If c <> Color.Empty Then
                e.CellStyle.BackColor = c
            End If

        End If

    End Sub
End Class

編集 削除
misamisa  2012-08-10 11:18:15  No: 147737  IP: 192.*.*.*

魔界の仮面弁士様、いつもご回答ありがとうございます。

私もいろいろ調べてみましたが、スタイルの設定は、列より行の方が
優先順位が高いのですね、、、

勉強になりました。

教えて頂いたように記述したところ、思った通りの事が実現しました。

ありがとうございました!

編集 削除
魔界の仮面弁士  2012-08-10 11:20:54  No: 147738  IP: 192.*.*.*

> DataGridViewの文字色に関して
> DataGridViewのセルの背景色を変更しておりますが、

よく見たら、タイトルと質問文が異なっていますね…。(^_^;)

文字色も合わせて引き継がせたいのであれば、先のコードで
BackColor だけでなく ForeColor も転記してみてください。

必要に応じて、その他のスタイル(Font、Alignment、WrapMode等々)も同様に。


Dim colStyle = dgv.Columns(e.ColumnIndex).InheritedStyle
Dim cellStyle = e.CellStyle

Dim c As Color, f As Font
c = colStyle.BackColor
If c <> Color.Empty Then cellStyle.BackColor = c
c = colStyle.ForeColor
If c <> Color.Empty Then cellStyle.ForeColor = c
c = colStyle.SelectionBackColor
If c <> Color.Empty Then cellStyle.SelectionBackColor = c
c = colStyle.SelectionForeColor
If c <> Color.Empty Then cellStyle.SelectionForeColor = c
f = colStyle.Font
If f IsNot Nothing Then cellStyle.Font = f

編集 削除
misamisa  2012-08-10 11:35:03  No: 147739  IP: 192.*.*.*

魔界の仮面弁士様、タイトルの件、申し訳ありません。

背景色の前に色に関しても変更したかった為、頭の中に色という
言葉が残ってしまっていたみたいです!^^;

※ 色に関しては別の方法で解決しました。

今回は背景色である為、やりたい事はできました。

ありがとうございました!

編集 削除