using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace wgscd
{
public partial class myTabControl : TabControl
{
public myTabControl()
{
InitializeComponent();
this.DrawMode = TabDrawMode.OwnerDrawFixed;//必须
SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);//避免闪烁
UpdateStyles();
}
protected Color HeaderBackColor1 = Color.DarkGreen;
protected Color HeaderBackColor2 = Color.DarkKhaki;
protected float headerbackangle = 45;
protected Color titlebackcolor1 = Color.Bisque;
protected Color titlebackcolor2 = Color.Blue;
protected float titlebackangle = 45;
protected Font headerfont = new Font("Arial", 12, FontStyle.Bold);
protected StringAlignment titlealignment = StringAlignment.Center;
protected Color headerfontcolor = Color.Plum;
protected Font focusedheaderfont = new Font("Arial", 11, FontStyle.Regular);
protected Color focusedheaderfontcolor = Color.PowderBlue;
Rectangle r = new Rectangle(1, 1, 200, 200);
protected override void OnPaint(PaintEventArgs e)//绘制整个TabControl控件背景不起作用。。。。。。。。。。。。
{
r = new Rectangle(0, 0, this.Width, this.Height);
Brush b = new SolidBrush(Color.Azure);
Graphics g = e.Graphics;
g.FillRectangle(b, r);
// base.OnPaint(e);
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
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;
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);
}
// base.OnDrawItem(e);
}
}
}