Windows Form中的TabControl重绘

最近整理自己工作以来的旧项目,将其中的一些技术点整理出来。这个tabcontrol重绘相关的项目是自己毕业不久就做的一个,针对这个项目后面还有wpf版,暂且不提,暂时先看这个。

下面是软件的主界面,当然这个重绘的还不够完全,针对tabcontrol边框的处理还不好。

ckqyjcfx_winform

可以看出,也有一定效果的。眨眼

下面说说步骤,看看代码:

1、首先就是设置tabcontrol的drawmode属性,使其重绘有效。

this.tabc_draw.DrawMode = TabDrawMode.OwnerDrawFixed;

2、写tabcontrol的drawitem事件。

void tabc_draw_DrawItem(object sender, DrawItemEventArgs e)
{
    Graphics g = e.Graphics;

    TabPage changedpage = tabc_draw.TabPages[e.Index];//当前处理标签
    Rectangle backrect = tabc_draw.GetTabRect(e.Index);//标签背景区域
    Brush backbrush;//标签背景色
    Brush fontbrush;//标签字体颜色
    Font tabFont;//标签字体
    Pen borderpen;//边框颜色

    //TabControl绘制
    Brush backtabcontrol = new SolidBrush(Color.Black);
    g.FillRectangle(backtabcontrol, this.tabc_draw.ClientRectangle.X + 100, this.tabc_draw.ClientRectangle.Y, this.tabc_draw.ClientRectangle.Size.Width, this.tabc_draw.ItemSize.Height);
    backtabcontrol.Dispose();

    if (e.State == DrawItemState.Selected)
    {
        backbrush = new SolidBrush(Color.Black);
        fontbrush = new SolidBrush(Color.Yellow);
        tabFont = new Font("宋体", 15, FontStyle.Bold, GraphicsUnit.Pixel);
        borderpen = new Pen(Color.LightBlue);
    }
    else
    {
        backbrush = new SolidBrush(Color.White);
        fontbrush = new SolidBrush(Color.Red);
        tabFont = new Font("楷体", 15, FontStyle.Bold, GraphicsUnit.Pixel);
        borderpen = new Pen(Color.DarkGreen);
    }
    //绘制标签背景
    g.FillRectangle(backbrush, backrect);

    //绘制标签字体
    StringFormat _StringFlags = new StringFormat();
    _StringFlags.Alignment = StringAlignment.Center;
    _StringFlags.LineAlignment = StringAlignment.Center;
    g.DrawString(changedpage.Text, tabFont, fontbrush, backrect, new StringFormat(_StringFlags));
    //绘制非标签原始名称【可依据e.State修改】 g.DrawString("呵呵", tabFont, fontbrush, backrect, new StringFormat(_StringFlags));

    //绘制标签边框
    //backrect.Offset(1, 1);
    //backrect.Inflate(2, 2);
    g.DrawRectangle(borderpen, backrect);

    backbrush.Dispose();
    tabFont.Dispose();
    fontbrush.Dispose();
    borderpen.Dispose();
}

注释都在代码里了,就不详述了。下面是最后的效果的【只是简单的实现,自己多写写,模仿下就可以写出好效果啦】

tabcontroldrawitem

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*