首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问怎么重绘DataGridView列头的样式

2012-05-29 
请教如何重绘DataGridView列头的样式?vs2005中c#写的winform程序,用到了很多DataGridView,想把灰色的列头(

请教如何重绘DataGridView列头的样式?
vs2005中c#写的winform程序,用到了很多DataGridView,想把灰色的列头(ColumnHeader)换成那种色彩渐变带有水晶效果的样式,不知道如何重绘?我开始在paint事件里在头的位置画一个列头覆盖原来的,可点击头时有闪动,可能是下面的位置本来已经绘制好了而我又画了一个的原因。后来干脆让DataGridView本身的列头不显示,就显示我手动绘制的那个,又觉得这样不太好。想问下大家我如何override绘制头的事件?或者到底怎么写最好?最好能提供一段源码,谢谢了!

[解决办法]
可以处理CellPainting事件。当事件参数中的RowIndex是-1时,画的是表头:

C# code
    public Form1()    {        InitializeComponent();        this.dataGridView1.CellPainting += new DataGridViewCellPaintingEventHandler(dataGridView1_CellPainting);    }    void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)    {        if (e.RowIndex == -1)        {            bool mouseOver = e.CellBounds.Contains(dataGridView1.PointToClient(Cursor.Position));            LinearGradientBrush brush = new LinearGradientBrush(                e.CellBounds,                mouseOver ?  Color.PeachPuff : Color.LightGray,                Color.DarkOrange,                 LinearGradientMode.Vertical);            using(brush)            {                e.Graphics.FillRectangle( brush, e.CellBounds);                Rectangle border = e.CellBounds;                border.Width -= 1;                e.Graphics.DrawRectangle( Pens.Gray, border);            }            e.PaintContent(e.CellBounds);            e.Handled = true;        }    }
[解决办法]
唯一的可能性,你有隐藏列

热点排行