开始做WinForm开发的时候,我想大家和我一样,都有一个相同的疑问。
Windows可以做的如此漂亮,为什么它提供的开发控件确如此“平淡无奇”。甚至可以用普通来形容。
时间长了以后才发现,原来可以通过OnPaint事件对控件的外观进行重绘。过了不久,随之的第二个问题就来了。OnPaint事件对于Button、Panel等单一控件还是比较有用的,但是对于DataGridView、ToolBar、TabControl等复合控件来说,该如何处理呢?
这个问题确实也困扰了“小白”我很长时间,甚至怀疑微软的“能力”(小白大都如此)。
还好,我有一个比较好的习惯,就是没事的时候i,去翻翻“天书”,因为它总能给我意外的惊喜。
言归正传,下面我就来教大家如何美化DataGridView(其实是MSDN在教我们)。
说明:由于本人年纪大了,没有追赶新技术的能力,所以VS和MSDN一直使用VS2005版。
所有讲解的内容均来自MSDN2005,如果和你的环境有差距,请大家谅解。
首先请大家打开MSDN,在索引页面的条件框内输入DataGridView。这时你会看到很多和DataGridView相关的介绍。而我们要关注的是自定义。
MSDN地址:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxmclictl/html/01ea5d4c-a736-4596-b0e9-a67a1b86e15f.htm(MSDN2005,建议大家直接看MSDN文档,也许你会发现我们都不知道的“秘密”)
图大家都看到了,用荧光标注的地方,就是我们要关注及使用的。微软其实早就准好了方案,就是等着那些需要的人来使用而已。
DataGridView要重绘的区域大致分为3部分:Column、RowHeader、SelectRow。
我们首先来绘制Column、RowHeader
CellPainting事件 就是我们要使用的事件。
MSDN说明:
注意:此事件在 .NET Framework 2.0 版中是新增的。
在单元格需要绘制时发生。
命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在 system.windows.forms.dll 中)
描述是很少,但是加上例子足够了
在使用事件之前,我们先来看一下事件参数,了解它以后,一切对我们来说更加简单了。
CellPainting(object sender, System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
object暂且不论(应该都知道吧),让我们来看看DataGridViewCellPaintingEventArgs
DataGridViewCel