FCL应用技巧之------如何设置ListView控件中的列头、SubItem单元的颜色

1 原理

微软的FCL的WinForm部分提供了大量的UI控件,控件本身设计的非常精妙,其OwnerDraw属性设置为false(默认)时,控件自身会采用默认值进行自动绘制,如果为true时,则在控件自身需要绘制时,发送事件给父窗体,为程序员提供自行编写绘制代码的机会。

2 代码

首先是设置 listView1的Owner属性为true并且把View属性设置为Details,然后是为DrawColumnHeader、DrawItem、DrawSubItem事件增加处理函数,最后是在处理函数中实现个性化的绘制。

this.listView1.OwnerDraw = true; 
this.listView1.View = System.Windows.Forms.View.Details;
this.listView1.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader);
            this.listView1.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem);
            this.listView1.DrawSubItem += new System.Windows.Forms.DrawListViewSubItemEventHandler(this.listView1_DrawSubItem);
//以上两步可以通过VS开发环境通过鼠标点击自动完成。实现部分需要程序员编码。
//正常绘制单元
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
        {
            e.DrawText();
        }

//把第一列的单元格背景色设置为蓝色
        private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                e.SubItem.BackColor = Color.Blue;
                e.DrawBackground();
            }
            e.DrawText();
        }
//把标题栏的背景色设置为红色
        private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            e.Graphics.FillRectangle(Brushes.Red, e.Bounds);
            e.DrawText();	//采用默认方式绘制标题文本
        }

3 实验结果


FCL应用技巧之------如何设置ListView控件中的列头、SubItem单元的颜色_第1张图片

你可能感兴趣的:(FCL应用技巧之------如何设置ListView控件中的列头、SubItem单元的颜色)