SubitemsはSubItems.backgroundcolorで背景の指定可能。
Columnheaderはプロパティが無いので、
listView.OwnerDraw = true として描画命令で色付きの四角を自分で描く。
listView.OwnerDraw = trueにしただけだと何も描かなくなる。
listView1_DrawColumnHeaderとlistView1_DrawItemを使う。
e.DrawDefault =true とすれば普通に描く。
ifとかで条件を設定して背景を描く。
参考リンク)
ListView ヘッダ部の背景色の指定
https://teratail.com/questions/109102
Default implementation for ListView OwnerDraw
https://stackoverflow.com/questions/9066408/default-implementation-for-listview-ownerdraw
ListView.OwnerDraw Property
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.listview.ownerdraw?view=netframework-4.7.2
void LsvDataDrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
//標準の背景を描く
e.DrawBackground();
//項目名に色付け:商品コード
if(e.ColumnIndex == 2 )
{
// 四角を描く
e.Graphics.FillRectangle(Brushes.LightBlue, e.Bounds);
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Trimming = StringTrimming.EllipsisCharacter;
sf.FormatFlags |= StringFormatFlags.NoWrap;
// 文字列を描く
e.Graphics.DrawString(e.Header.Text, LsvData.Font, Brushes.Black, e.Bounds, sf);
}
//項目名に色付け:数量、カウント
else if( e.ColumnIndex == 4)
{
e.Graphics.FillRectangle(Brushes.LightCoral, e.Bounds);
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Trimming = StringTrimming.EllipsisCharacter;
sf.FormatFlags |= StringFormatFlags.NoWrap;
e.Graphics.DrawString(e.Header.Text, LsvData.Font, Brushes.Black, e.Bounds, sf);
}
else{
e.DrawDefault =true;
}
}
void LsvDatatDrawItem(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
0 件のコメント:
コメントを投稿