Windows Form中的TabControl重绘

Windows Form中的TabControl重绘,第1张

概述Windows Form中的TabControl重绘http://blog.canself.com/tag/tabcontrol%E9%87%8D%E7%BB%98/最近整理自己工作以来的旧项目,将其中的一些技术点整理出来。这个tabcontrol重绘相关的项目是自己毕业不久就做的一个,针对这个项目后面还有wpf版,暂且不提,暂时先看这个。下面是软件的主界面 Windows Form中的TabControl重绘 http://blog.canself.com/tag/tabcontrol%E9%87%8D%E7%BB%98/

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

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

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

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

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

1 this.tabc_draw.DrawMode = TabDrawMode.OwnerDrawFixed;

2、写tabcontrol的drawitem事件。

           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.transparent);
            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.White);
                Fontbrush = new SolIDBrush(color.Blue);
                tabFont = new Font("宋体",14,(FontStyle.Bold|FontStyle.Italic),GraphicsUnit.Pixel);
                borderpen = new Pen(color.lightBlue);
            }
            else
            {
                backbrush = new SolIDBrush(color.WhiteSmoke);
                Fontbrush = new SolIDBrush(color.Black);
                tabFont = new Font("宋体",12,FontStyle.Regular,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("呵呵",new StringFormat(_StringFlags));


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


            backbrush.dispose();
            tabFont.dispose();
            Fontbrush.dispose();
            borderpen.dispose();

voID tabc_draw_DrawItem(object sender,DrawItemEventArgs e)
2 {
3     Graphics g = e.Graphics;
4  
5TabPage changedpage = tabc_draw.TabPages[e.Index];//当前处理标签
6Rectangle backrect = tabc_draw.GetTabRect(e.Index);//标签背景区域
7Brush backbrush;//标签背景色
8Brush Fontbrush;//标签字体颜色
9Font tabFont;//标签字体
10Pen borderpen;//边框颜色
11  
12    //TabControl绘制
13Brush backtabcontrol = new SolIDBrush(color.Black);
14g.FillRectangle(backtabcontrol,.tabc_draw.ClIEntRectangle.X + 100,monospace!important; Font-size:1em!important; margin:0px!important; outline:0px!important; padding:0px!important; vertical-align:baseline!important; float:none!important; position:static!important; left:auto!important; top:auto!important; right:auto!important; bottom:auto!important; height:auto!important; wIDth:auto!important; line-height:1.1em!important; direction:ltr!important; display:inline!important; background:none!important">.tabc_draw.ClIEntRectangle.Y,monospace!important; Font-size:1em!important; margin:0px!important; outline:0px!important; padding:0px!important; vertical-align:baseline!important; float:none!important; position:static!important; left:auto!important; top:auto!important; right:auto!important; bottom:auto!important; height:auto!important; wIDth:auto!important; line-height:1.1em!important; direction:ltr!important; display:inline!important; background:none!important">.tabc_draw.ClIEntRectangle.Size.WIDth,monospace!important; Font-size:1em!important; margin:0px!important; outline:0px!important; padding:0px!important; vertical-align:baseline!important; float:none!important; position:static!important; left:auto!important; top:auto!important; right:auto!important; bottom:auto!important; height:auto!important; wIDth:auto!important; line-height:1.1em!important; direction:ltr!important; display:inline!important; background:none!important">.tabc_draw.ItemSize.Height);
15backtabcontrol.dispose();
16  
17    if (e.State == DrawItemState.Selected)
1819        backbrush = 20Fontbrush = SolIDBrush(color.Yellow);
21tabFont = Font("宋体",15,FontStyle.Bold,GraphicsUnit.Pixel);
22borderpen = Pen(color.lightBlue);
23}
24else
25{
26SolIDBrush(color.White);
27SolIDBrush(color.Red);
28"楷体"29Pen(color.DarkGreen); 30}
31//绘制标签背景
32g.FillRectangle(backbrush,backrect);
3334//绘制标签字体
35StringFormat _StringFlags = StringFormat();
36_StringFlags.Alignment = Stringalignment.Center;
37_StringFlags.lineAlignment = Stringalignment.Center;
38g.DrawString(changedpage.Text, StringFormat(_StringFlags));
39//绘制非标签原始名称【可依据e.State修改】 g.DrawString("呵呵",new StringFormat(_StringFlags));
4041//绘制标签边框 42//backrect.Offset(1,1);
43//backrect.Inflate(2,2);
44g.DrawRectangle(borderpen,monospace!important; Font-size:1em!important; margin:0px!important; outline:0px!important; padding:0px 0.3em 0px 0px!important; vertical-align:baseline!important; text-align:right!important; float:none!important; position:static!important; left:auto!important; top:auto!important; right:auto!important; bottom:auto!important; height:auto!important; wIDth:2.7em!important; line-height:1.1em!important; direction:ltr!important; display:block!important; background:none!important">4546backbrush.dispose();
47tabFont.dispose();
48Fontbrush.dispose();
49borderpen.dispose();
50}

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

总结

以上是内存溢出为你收集整理的Windows Form中的TabControl重绘全部内容,希望文章能够帮你解决Windows Form中的TabControl重绘所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存