作成日: 2015/08/14 最終更新日: 2025/04/23
文書種別
使用方法
詳細
セル単位でセルの背景色や前景色、フォントを変更するには、カスタムスタイルをセルに割り当てる方法とオーナー描画を使用する方法があります。スタイルの優先順位は、オーナー描画を使用する方法の方が高くなります。
さらに、カスタムスタイルを使用せず、GetCellRange(Int32,Int32) メソッドで指定したセルにStyleNewで新しいスタイルを作成し、背景色などを直接設定することも可能です。
◆カスタムスタイルをセルに割り当てる方法
◎サンプルコード(Visual Basic)
◎サンプルコード(C#)
◆オーナー描画を使用する方法
◎サンプルコード(Visual Basic)
◎サンプルコード(C#)
◆GetCellRangeとStyleNewを使用する方法
◎サンプルコード(Visual Basic)
◎サンプルコード(C#)
(2025/04/23 追記)
「オーナー描画を使用する方法」を用いる場合、OwnerDrawCellイベントのe引数に対するStyleパラメータのプロパティを変更する(*1)と、他のセルに影響したり予期せぬ結果となることが分かりました。
そのため、Style.xxxxプロパティではなく、Styleパラメータそのものに新しいCellStyleオブジェクトを割り当てる(*2)必要がありますので、ご留意ください。
(*1 : 非推奨の方法) e.Style.ForeColor = Color.Red
(*2 : 正しい方法) e.Style = c1FlexGrid1.Styles["RedStyle"]
さらに、カスタムスタイルを使用せず、GetCellRange(Int32,Int32) メソッドで指定したセルにStyleNewで新しいスタイルを作成し、背景色などを直接設定することも可能です。
◆カスタムスタイルをセルに割り当てる方法
◎サンプルコード(Visual Basic)
Private Sub Form1_Load(sender As Object, e As EventArgs)
Dim newStyle1 As CellStyle = C1FlexGrid1.Styles.Add("NewStyle1")
newStyle1.BackColor = Color.Blue
newStyle1.ForeColor = Color.White
newStyle1.Font = new Font("MS 明朝", 12, FontStyle.Bold)
C1FlexGrid1.SetCellStyle(1, 1, newStyle1)
Dim newStyle2 As CellStyle = C1FlexGrid1.Styles.Add("NewStyle2")
newStyle2.BackColor = Color.Red
newStyle2.ForeColor = Color.White
C1FlexGrid1.SetCellStyle(2, 1, newStyle2)
End Sub
Dim newStyle1 As CellStyle = C1FlexGrid1.Styles.Add("NewStyle1")
newStyle1.BackColor = Color.Blue
newStyle1.ForeColor = Color.White
newStyle1.Font = new Font("MS 明朝", 12, FontStyle.Bold)
C1FlexGrid1.SetCellStyle(1, 1, newStyle1)
Dim newStyle2 As CellStyle = C1FlexGrid1.Styles.Add("NewStyle2")
newStyle2.BackColor = Color.Red
newStyle2.ForeColor = Color.White
C1FlexGrid1.SetCellStyle(2, 1, newStyle2)
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
CellStyle newStyle1 = c1FlexGrid1.Styles.Add("NewStyle1");
newStyle1.BackColor = Color.Blue;
newStyle1.ForeColor = Color.White;
newStyle1.Font = new Font("MS 明朝", 12, FontStyle.Bold);
c1FlexGrid1.SetCellStyle(1, 1, newStyle1);
CellStyle newStyle2 = c1FlexGrid1.Styles.Add("NewStyle2");
newStyle2.BackColor = Color.Red;
newStyle2.ForeColor = Color.White;
c1FlexGrid1.SetCellStyle(2, 1, newStyle2);
}
{
CellStyle newStyle1 = c1FlexGrid1.Styles.Add("NewStyle1");
newStyle1.BackColor = Color.Blue;
newStyle1.ForeColor = Color.White;
newStyle1.Font = new Font("MS 明朝", 12, FontStyle.Bold);
c1FlexGrid1.SetCellStyle(1, 1, newStyle1);
CellStyle newStyle2 = c1FlexGrid1.Styles.Add("NewStyle2");
newStyle2.BackColor = Color.Red;
newStyle2.ForeColor = Color.White;
c1FlexGrid1.SetCellStyle(2, 1, newStyle2);
}
◆オーナー描画を使用する方法
◎サンプルコード(Visual Basic)
Private Sub Form1_Load(sender As Object, e As EventArgs)
C1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw
End Sub
Private Sub C1FlexGrid1_OwnerDrawCell(sender As Object, e As OwnerDrawCellEventArgs)
If e.Row = 1 And e.Col = 1 Then
C1FlexGrid1.Cols(e.Col).StyleNew.BackColor = Color.Blue
C1FlexGrid1.Cols(e.Col).Style.ForeColor = Color.White
C1FlexGrid1.Cols(e.Col).Style.Font = New Font("MS 明朝", 12, FontStyle.Bold)
ElseIf e.Row = 2 And e.Col = 1 Then
C1FlexGrid1.Cols(e.Col).StyleNew.BackColor = Color.Red
C1FlexGrid1.Cols(e.Col).Style.ForeColor = Color.White
C1FlexGrid1.Cols(e.Col).Style.Font = New Font("MS 明朝", 12, FontStyle.Italic)
Else
C1FlexGrid1.Cols(e.Col).StyleNew.BackColor = Color.White
C1FlexGrid1.Cols(e.Col).Style.ForeColor = Color.Black
C1FlexGrid1.Cols(e.Col).Style.Font = New Font("MS 明朝", 9, FontStyle.Regular)
End If
End Sub
C1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw
End Sub
Private Sub C1FlexGrid1_OwnerDrawCell(sender As Object, e As OwnerDrawCellEventArgs)
If e.Row = 1 And e.Col = 1 Then
C1FlexGrid1.Cols(e.Col).StyleNew.BackColor = Color.Blue
C1FlexGrid1.Cols(e.Col).Style.ForeColor = Color.White
C1FlexGrid1.Cols(e.Col).Style.Font = New Font("MS 明朝", 12, FontStyle.Bold)
ElseIf e.Row = 2 And e.Col = 1 Then
C1FlexGrid1.Cols(e.Col).StyleNew.BackColor = Color.Red
C1FlexGrid1.Cols(e.Col).Style.ForeColor = Color.White
C1FlexGrid1.Cols(e.Col).Style.Font = New Font("MS 明朝", 12, FontStyle.Italic)
Else
C1FlexGrid1.Cols(e.Col).StyleNew.BackColor = Color.White
C1FlexGrid1.Cols(e.Col).Style.ForeColor = Color.Black
C1FlexGrid1.Cols(e.Col).Style.Font = New Font("MS 明朝", 9, FontStyle.Regular)
End If
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
c1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw;
}
private void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
{
if (e.Row == 1 && e.Col == 1)
{
c1FlexGrid1.Cols[e.Col].StyleNew.BackColor = Color.Blue;
c1FlexGrid1.Cols[e.Col].Style.ForeColor = Color.White;
c1FlexGrid1.Cols[e.Col].Style.Font = new Font("MS 明朝", 12, FontStyle.Bold);
}
else if (e.Row == 2 && e.Col == 1)
{
c1FlexGrid1.Cols[e.Col].StyleNew.BackColor = Color.Red;
c1FlexGrid1.Cols[e.Col].Style.ForeColor = Color.White;
c1FlexGrid1.Cols[e.Col].Style.Font = new Font("MS 明朝", 12, FontStyle.Italic);
}
else
{
c1FlexGrid1.Cols[e.Col].StyleNew.BackColor = Color.White;
c1FlexGrid1.Cols[e.Col].Style.ForeColor = Color.Black;
c1FlexGrid1.Cols[e.Col].Style.Font = new Font("MS 明朝", 9, FontStyle.Regular);
}
}
{
c1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw;
}
private void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
{
if (e.Row == 1 && e.Col == 1)
{
c1FlexGrid1.Cols[e.Col].StyleNew.BackColor = Color.Blue;
c1FlexGrid1.Cols[e.Col].Style.ForeColor = Color.White;
c1FlexGrid1.Cols[e.Col].Style.Font = new Font("MS 明朝", 12, FontStyle.Bold);
}
else if (e.Row == 2 && e.Col == 1)
{
c1FlexGrid1.Cols[e.Col].StyleNew.BackColor = Color.Red;
c1FlexGrid1.Cols[e.Col].Style.ForeColor = Color.White;
c1FlexGrid1.Cols[e.Col].Style.Font = new Font("MS 明朝", 12, FontStyle.Italic);
}
else
{
c1FlexGrid1.Cols[e.Col].StyleNew.BackColor = Color.White;
c1FlexGrid1.Cols[e.Col].Style.ForeColor = Color.Black;
c1FlexGrid1.Cols[e.Col].Style.Font = new Font("MS 明朝", 9, FontStyle.Regular);
}
}
◆GetCellRangeとStyleNewを使用する方法
◎サンプルコード(Visual Basic)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
C1FlexGrid1.GetCellRange(1, 1).StyleNew.BackColor = Color.Blue ' 新しいスタイルを作成
C1FlexGrid1.GetCellRange(1, 1).Style.ForeColor = Color.White
C1FlexGrid1.GetCellRange(1, 1).Style.Font = New Font("MS 明朝", 12, FontStyle.Bold)
End Sub
C1FlexGrid1.GetCellRange(1, 1).StyleNew.BackColor = Color.Blue ' 新しいスタイルを作成
C1FlexGrid1.GetCellRange(1, 1).Style.ForeColor = Color.White
C1FlexGrid1.GetCellRange(1, 1).Style.Font = New Font("MS 明朝", 12, FontStyle.Bold)
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
c1FlexGrid1.GetCellRange(1, 1).StyleNew.BackColor = Color.Blue; // 新しいスタイルを作成
c1FlexGrid1.GetCellRange(1, 1).Style.ForeColor = Color.White;
c1FlexGrid1.GetCellRange(1, 1).Style.Font = new Font("MS 明朝", 12, FontStyle.Bold);
}
{
c1FlexGrid1.GetCellRange(1, 1).StyleNew.BackColor = Color.Blue; // 新しいスタイルを作成
c1FlexGrid1.GetCellRange(1, 1).Style.ForeColor = Color.White;
c1FlexGrid1.GetCellRange(1, 1).Style.Font = new Font("MS 明朝", 12, FontStyle.Bold);
}
(2025/04/23 追記)
「オーナー描画を使用する方法」を用いる場合、OwnerDrawCellイベントのe引数に対するStyleパラメータのプロパティを変更する(*1)と、他のセルに影響したり予期せぬ結果となることが分かりました。
そのため、Style.xxxxプロパティではなく、Styleパラメータそのものに新しいCellStyleオブジェクトを割り当てる(*2)必要がありますので、ご留意ください。
(*1 : 非推奨の方法) e.Style.ForeColor = Color.Red
(*2 : 正しい方法) e.Style = c1FlexGrid1.Styles["RedStyle"]
関連情報
旧文書番号
81426