using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Drawing.Imaging;
|
|
using System.Drawing.Text;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace BWP.WinFormControl
|
|
{
|
|
public class UTabControl : TabControl
|
|
{
|
|
//Image tabBackground;
|
|
//Form parent;
|
|
|
|
Font textFont = new Font("宋体", 15);
|
|
Font TextFont { get { return textFont; } set { textFont = value; } }
|
|
|
|
public bool FromRightFlow { get; set; }
|
|
|
|
#region Initiates
|
|
|
|
public UTabControl()
|
|
{
|
|
setStyles();
|
|
|
|
//tabBackground = new Bitmap(this.GetType(), "TabButtonBackground.bmp");
|
|
|
|
this.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
//this.ItemSize = new System.Drawing.Size(150, 50);
|
|
this.Location = new System.Drawing.Point(0, 0);
|
|
|
|
this.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
|
|
|
|
this.ResumeLayout(false);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Private UI Methods
|
|
|
|
private void setStyles()
|
|
{
|
|
base.SetStyle(
|
|
ControlStyles.UserPaint |
|
|
ControlStyles.OptimizedDoubleBuffer |
|
|
ControlStyles.AllPaintingInWmPaint |
|
|
ControlStyles.ResizeRedraw |
|
|
ControlStyles.SupportsTransparentBackColor,
|
|
true);
|
|
base.UpdateStyles();
|
|
}
|
|
|
|
// 计算控件底线
|
|
//private void setLowBound(Control container)
|
|
//{
|
|
// int tmp = 0;
|
|
// Control c = null;
|
|
// for (int i = 0; i < container.Controls.Count; i++)
|
|
// {
|
|
// c = container.Controls[i];
|
|
// if (tmp < c.Bottom)
|
|
// tmp = c.Bottom;
|
|
// }
|
|
// container.Tag = tmp;
|
|
//}
|
|
#endregion
|
|
|
|
#region Tab Overrides
|
|
//protected override void OnControlAdded(ControlEventArgs e)
|
|
//{
|
|
// setLowBound(e.Control);
|
|
//}
|
|
|
|
//protected override void OnSelected(TabControlEventArgs e)
|
|
//{
|
|
// parent.Text = e.TabPage.Text;
|
|
//}
|
|
|
|
//protected override void OnParentChanged(EventArgs e)
|
|
//{
|
|
// if (parent == null)
|
|
// parent = this.FindForm();
|
|
// if (this.TabPages.Count != 0)
|
|
// parent.Text = this.TabPages[0].Text;
|
|
//}
|
|
#endregion
|
|
|
|
#region Paint Override
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
//e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
|
|
|
|
for (int i = 0; i < this.TabCount; i++)
|
|
{
|
|
var rectangle = this.GetTabRect(i);
|
|
var textBrush = SystemBrushes.ControlText;
|
|
if (this.SelectedIndex == i)
|
|
{
|
|
textBrush = new System.Drawing.SolidBrush(Color.FromArgb(255, 255, 255));
|
|
e.Graphics.FillPath(new System.Drawing.SolidBrush(Color.FromArgb(66, 163, 218)), GetPath(rectangle));
|
|
}
|
|
//e.Graphics.DrawImage(tabBackground, rectangle);
|
|
|
|
SizeF textSize
|
|
= e.Graphics.MeasureString(this.TabPages[i].Text, this.TextFont);
|
|
|
|
//e.Graphics.DrawString(
|
|
// this.TabPages[i].Text,
|
|
// this.TextFont,
|
|
// SystemBrushes.ControlLightLight,
|
|
// rectangle.X + (rectangle.Width - textSize.Width) / 2 + 1,
|
|
// rectangle.Y + (rectangle.Height - textSize.Height) / 2 + 1);
|
|
|
|
e.Graphics.DrawString(
|
|
this.TabPages[i].Text,
|
|
this.TextFont,
|
|
textBrush,
|
|
rectangle.X + (rectangle.Width - textSize.Width) / 2,
|
|
rectangle.Y + (rectangle.Height - textSize.Height) / 2);
|
|
}
|
|
}
|
|
|
|
GraphicsPath GetPath(Rectangle rectangle)
|
|
{
|
|
GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
|
|
path.AddLine(rectangle.Left - 1, rectangle.Top, rectangle.Left - 1, rectangle.Top);
|
|
path.AddLine(rectangle.Left - 1, rectangle.Top, rectangle.Right, rectangle.Top);
|
|
path.AddLine(rectangle.Right, rectangle.Top, rectangle.Right, rectangle.Bottom);
|
|
path.AddLine(rectangle.Right, rectangle.Bottom + 1, rectangle.Left - 1, rectangle.Bottom + 1);
|
|
return path;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|