Search

2019/03/06

ListViewの項目名に背景色をつける:DrawColumnHeader()で四角を描く

ListViewのSubItemsでなく、ColumnHeaderに背景を色付けする。
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 件のコメント:

コメントを投稿