自定义标题背景的TabControl(转贴)

转载 2008年10月03日 13:34:00

标准控件里面的TabControl是不能定义标题栏背景色的,在专业软件开发中,使用标准控件显然是不够的,但是很多开发者习惯了使用现成控件或者是别人做好的控件,一提到要用GDI绘制控件就觉得麻烦。但是在.NET中,GDI+很好的封装了原来使用不是很方便的GDI绘图方法,似的现在用C#绘制专业效果的控件变得非常容易。希望这篇介绍能起到抛砖引玉的效果。

自定义的TabControl使用时的效果。标题栏背景和标题背景都可以用两种颜色渐变效果,选中的标题字体和未选中的字体可以分别自定义。

增加的属性分布控制渐变的开始颜色和结束颜色,渐变的角度,以及两种字体和字体颜色。

要自定义TabContrl中的绘制,首先要把DrawMode属相设置为OwnerDrawFixed

接下来就是处理绘制的事件,DrawItem了

先定义要用到的变量:

 

            Graphics g = e.Graphics;
            Rectangle endPageRect = GetTabRect(TabPages.Count - 1); //最后一个标题栏的范围
            Rectangle TitleRect = GetTabRect(e.Index);              //当前标题栏的范围
            Rectangle HeaderBackRect = Rectangle.Empty;             //背景区域

 

            switch (Alignment)
            {
                case TabAlignment.Top:
                    HeaderBackRect = new Rectangle(new Point(endPageRect.X + endPageRect.Width, endPageRect.Y),
                        new Size(Width - endPageRect.X - endPageRect.Width, endPageRect.Height));
                    break;
                case TabAlignment.Bottom:
                    HeaderBackRect = new Rectangle(new Point(endPageRect.X + endPageRect.Width, endPageRect.Y),
                        new Size(Width - endPageRect.X - endPageRect.Width, endPageRect.Height));
                    break;
                case TabAlignment.Left:
                    HeaderBackRect = new Rectangle(new Point(endPageRect.X, endPageRect.Y + endPageRect.Height),
                        new Size(endPageRect.Width, Height - endPageRect.Y - endPageRect.Height));
                    break;
                case TabAlignment.Right:
                    HeaderBackRect = new Rectangle(new Point(endPageRect.X, endPageRect.Y + endPageRect.Height),
                        new Size(endPageRect.Width, Height - endPageRect.Y - endPageRect.Height));
                    break;
            }

 

            Brush TitleBackBrush = new LinearGradientBrush(
                TitleRect,                  //渐变区域
                titlebackcolor1,            //渐变开始颜色
                titlebackcolor2,            //渐变结束颜色
                titlebackangle);            //渐变角度

 

            Font font = headerfont;
            StringFormat sf = new StringFormat();
            sf.Alignment = titlealignment;
            sf.LineAlignment = StringAlignment.Center;
            Color fontcolor = headerfontcolor;

 

C#的图形绘制工作是由Graphics类来完成的,但是这个类不能直接用new来创建,需要从绘制事件的参数或者调用要绘制的对象的CreateGraphic方法来得到。这里就直接使用的DrawItem事件的参数DrawItemEventArgs中的Graphics成员。

定义了几个Rectangle变量,是为了下面的绘制区域做准备。

由于TabControl可能由于Alignment属相定义不同,得到的背景区域的矩形也不同,所以要分别来定义HeaderBackRect 的区域。

Brush TitleBackBrush 是用于填充标题背景的背景色定义。这里是采用的渐变色:LinearGradientBrush来定义的。

font 是定义用于绘制标题文字的字体。

好了,下面可以开始绘制了

 

            if (SelectedIndex == e.Index)    //如果绘制的标题就是选中的标题,则使用选中标题的字体,同时更新font和fontcolor
            {
                g.DrawRectangle(new Pen(TabPages[e.Index].BackColor), TitleRect);    //消除选中标题的矩形方框
                font = focusedheaderfont;
                fontcolor = focusedheaderfontcolor;
            }

 

            Brush fontbrush = new SolidBrush(fontcolor);

 

            //绘制标题文本
            g.DrawString(TabPages[e.Index].Text, font, fontbrush, TitleRect, sf);

 

            //绘制背景
            if (HeaderBackRect != Rectangle.Empty)
            {
                Brush HeaderBackBrush = new LinearGradientBrush(
                    HeaderBackRect,
                    HeaderBackColor1,
                    HeaderBackColor2,
                    headerbackangle);

 

                g.FillRectangle(HeaderBackBrush, HeaderBackRect);
            }

 

最后来看下效果

 

C#仿QQ皮肤-TabControl控件实现

导读部分 ----------------------------------------------------------------------------------------------...
  • az44yao
  • az44yao
  • 2014年09月05日 11:26
  • 1774

C# winfrom TabConTrol控件背景颜色问题

C# TabConTrol控件背景颜色问题       大家肯定都遇到过这样的问题,在做WinForm项目的时候,需要对窗体和控件进行美化,而使用第三方控件的话也没有什么免费的,这时就需要自己用...
  • u013558606
  • u013558606
  • 2014年08月09日 08:56
  • 2842

Win10自定义开始菜单磁贴背景颜色及图标

问题: win10的开始菜单磁贴中,office的图标背景色与设置的系统主题色不一致。或者像自定义磁贴背景色。 方法: 1、定位到软件主程序所在目录 可以通过右键磁贴,打开文件所在位置...
  • DearMorning
  • DearMorning
  • 2016年12月30日 19:48
  • 5061

Android中自定义ScrollView的滑动监听事件,并在滑动时渐变标题栏背景颜色

  • 2017年03月19日 20:03
  • 2.97MB
  • 下载

自定义iOS7导航栏背景,标题和返回按钮文字颜色

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏...
  • mad1989
  • mad1989
  • 2014年11月26日 16:22
  • 188332

自定义iOS7导航栏背景,标题和返回按钮文字颜色

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文...
  • Eduora_meimei
  • Eduora_meimei
  • 2015年04月21日 20:52
  • 685

自定义iOS7导航栏背景,标题和返回按钮文字颜色

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏...
  • muzhenhua
  • muzhenhua
  • 2015年07月28日 09:37
  • 335

自定义iOS7导航栏背景,标题和返回按钮文字颜色

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景...
  • gaojq_ios
  • gaojq_ios
  • 2015年07月23日 19:37
  • 299

自定义iOS7导航栏背景,标题和返回按钮文字颜色

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏...
  • RainShenJi
  • RainShenJi
  • 2015年01月05日 23:10
  • 536

iOS 自定义导航栏背景,左侧按钮,右侧按钮,及标题

一:导航栏的背景颜色如何设置 控制器是UINavigationController[self.navigationBar setBackgroundImage:[UIImage imageNamed...
  • TechAlleyBoy
  • TechAlleyBoy
  • 2017年04月01日 15:15
  • 7556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义标题背景的TabControl(转贴)
举报原因:
原因补充:

(最多只允许输入30个字)