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 件のコメント:
コメントを投稿