最近开发WinForm频繁使用了TabControl控件,这个控件的选项卡没有BackgroundImage这个属性,那么如何为其各个选项卡添加背景图片呢?(这里说的是每个TabPage的头部,也就是标题,不是工作区域。)

最开始用到TabControl的时候,我的每个选项卡是写死的,而后由于项目需求又动态添加了TabControl并生成各个选项卡,而两次我都要重绘其标题,因此在这里把我当时两种情形下重绘的方法通过一个例子一起分享出来。

首先先在窗体拖个Tabcontrol控件,然后更改了其Alignment属性为Left,使其选项卡在左边。然后可以通过更改其ItemSize调节每个选项卡的大小。值得注意的是,因为在此是把TabControl向左旋转了90°,所以此时设置宽的时候实际上改变的是它的高,设置高的时候实际上改变的是它的宽。而且设置宽(改变高)发现无效是因为受选项卡文本字体所影响,可相应地改变字体尺寸。调整一番后的效果图:

WinForm中重绘TabControl选项卡标题

接着就要进入正题重绘其选项卡背景了。首先要把它的DrawMode属性改为OwnerDrawFixed,改了这个才会让用户自己绘制标题生效。接着给它添加DrawItem事件。事件重绘方法如下:

 1 private void tabMain_DrawItem(object sender, DrawItemEventArgs e)
 2         {
 3             Bitmap b0 = new Bitmap(@"..\..\Images\1.jpg");
 4             Bitmap b1 = new Bitmap(@"..\..\Images\2.jpg");
 5             Bitmap b2 = new Bitmap(@"..\..\Images\3.jpg");
 6             Bitmap b3 = new Bitmap(@"..\..\Images\4.jpg");
 7             switch (e.Index)
 8                 {
 9                     case 0:
10                         e.Graphics.DrawImage(b0, e.Bounds);
11                         break;
12                     case 1:
13                         e.Graphics.DrawImage(b1, e.Bounds);
14                         break;
15                     case 2: 
16                         e.Graphics.DrawImage(b2, e.Bounds);
17                         break;
18                     case 3:
19                         e.Graphics.DrawImage(b3, e.Bounds);
20                         break;
21                 }
22         }
View Code

相关文章: