環境:Visual Basic 2008
DataGridViewのセルの背景色を変更しておりますが、その際に、1行置きに変更するパターンと、
1列そのまま変更するパターンと、2つの記述をしています。
その際に、列の背景色の方を前面(優先)したいと考えていますがどのように記述すれば良いでしょうか?
記述する順番かと思い、下記のような記述をしてみましたがNGでした。。
《現在の記述内容》
G_AAA.AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue
G_AAA.Columns(7).DefaultCellStyle.BackColor = Color.LightGray
初歩的な質問で申し訳ありませんが、教えて下さい。
列単位のセルスタイルは、行スタイルよりも先に処理されるので、
求めている結果にはならないと思います。
> 記述する順番かと思い、下記のような記述をしてみましたが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
魔界の仮面弁士様、いつもご回答ありがとうございます。
私もいろいろ調べてみましたが、スタイルの設定は、列より行の方が
優先順位が高いのですね、、、
勉強になりました。
教えて頂いたように記述したところ、思った通りの事が実現しました。
ありがとうございました!
> 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
魔界の仮面弁士様、タイトルの件、申し訳ありません。
背景色の前に色に関しても変更したかった為、頭の中に色という
言葉が残ってしまっていたみたいです!^^;
※ 色に関しては別の方法で解決しました。
今回は背景色である為、やりたい事はできました。
ありがとうございました!