C# Winfrom TabControl美化
实例一:
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms; namespace KUN.CONTROL.LIB.CONTROL
{
public partial class KMenuTabControl : System.Windows.Forms.TabControl
{
#region 属性、构造
Color SelectedColor = Color.LightSkyBlue;
Color MoveColor = Color.LightSeaGreen;
Color FontColor = Color.Black;
int TextLeft = 10;
[Browsable(true)]
[Description("选项卡标题左边距"), Category("TextLeft"), DefaultValue(typeof(Int32), "10")]
public int TitleTextLeft
{
get { return TextLeft; }
set { this.TextLeft = value; }
} [Browsable(true)]
[Description("选项卡标题字体颜色"), Category("TitleColor"), DefaultValue(typeof(Color), "Black")]
public Color TitleFontColor
{
get { return FontColor; }
set { this.FontColor = value; }
} [Browsable(true)]
[Description("选项卡标题字体选中颜色"), Category("TitleColor"), DefaultValue(typeof(Color), "LightSkyBlue")]
public Color TitleSelectedColor
{
get { return SelectedColor; }
set { this.SelectedColor = value; }
} [Browsable(true)]
[Description("选项卡标题字体悬浮颜色"), Category("TitleColor"), DefaultValue(typeof(Color), "White")]
public Color TitleMoveColor
{
get { return MoveColor; }
set { this.MoveColor = value; }
} [Browsable(true), Description("整个控件的背景色"), Category("外观")]
public Color TabControlBackColor { get; set; } [Browsable(true), Description("TabControl ItemSize"), Category("外观")]
public Size TabControlItemSize { get; set; } public KMenuTabControl()
{
this.SuspendLayout();
this.DrawMode = TabDrawMode.OwnerDrawFixed;
this.ResumeLayout(false);
this.SizeMode = TabSizeMode.Fixed;
this.Multiline = true;
this.TabControlBackColor = Color.SeaShell;
this.TabControlItemSize = new Size(100, 28);
this.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabMenu_DrawItem);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown);
}
#endregion protected override void OnPaint(PaintEventArgs e)
{
Rectangle tcRec = this.ClientRectangle;//整个tabControl的边框
e.Graphics.FillRectangle(new SolidBrush(this.TabControlBackColor), tcRec);
if (this.ItemSize!=this.TabControlItemSize)
{
this.ItemSize = TabControlItemSize;
} StringFormat sf = new StringFormat();//封装文本布局信息
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Near;
for (int i = 0; i < this.TabCount; i++)
{
Graphics g = e.Graphics;
// int width = (int)g.MeasureString(this.Controls[i].Text, this.Font).Width + 40;
Rectangle rect = this.GetTabRect(i);
// rect.Width = width;
if (this.SelectedIndex == i)
g.FillRectangle(new SolidBrush(MoveColor), rect);
else g.FillRectangle(new SolidBrush(SelectedColor), rect); SolidBrush brush = new SolidBrush(FontColor);
// rect.Width = width;
rect.X += TextLeft;
g.DrawString(this.Controls[i].Text, this.Font, brush, rect, sf);
using (Pen objpen = new Pen(Color.Black))
{
int tx = (int)(rect.X + (rect.Width - 30));
rect.X = tx - 2;
Point p5 = new Point(tx, 8);
Font font = new System.Drawing.Font("微软雅黑", 12);
g.DrawString("〇", font, brush, rect, sf);
font = new System.Drawing.Font("微软雅黑", 11);
rect.X = tx + 2;
rect.Y = rect.Y - 1;
g.DrawString("×", font, brush, rect, sf);
}
}
} public override Rectangle DisplayRectangle
{
get
{
Rectangle rect = base.DisplayRectangle;
return new Rectangle(rect.Left - 2, rect.Top - 2, rect.Width + 4, rect.Height + 5);
}
} int index = -1;
protected override void OnMouseMove(MouseEventArgs e)
{
int Count = 0;
try
{
Graphics g = this.CreateGraphics();
SolidBrush brush = new SolidBrush(FontColor);
StringFormat sf = new StringFormat();//封装文本布局信息
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Near; for (int i = 0; i < this.TabPages.Count; i++)
{
TabPage tp = this.TabPages[i];
if (this.GetTabRect(i).Contains(e.Location) && tp != this.SelectedTab)
{
if (index != i)
{
if (Count == 0)
{
if (index != -1 && this.TabPages[index] != this.SelectedTab)
{
g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(index)); RectangleF tRectangle = this.GetTabRect(index);
tRectangle.X += TextLeft;
g.DrawString(this.Controls[index].Text, this.Font, brush, tRectangle, sf);
}
Count = 1;
}
index = i;
g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(i));
RectangleF tRectangleF = this.GetTabRect(i);
tRectangleF.X += TextLeft;
g.DrawString(this.Controls[i].Text, this.Font, brush, tRectangleF, sf);
using (Pen objpen = new Pen(Color.Black))
{
int tx = (int)(tRectangleF.X + (tRectangleF.Width - 30));
tRectangleF.X = tx - 2;
brush.Color = Color.White;
Font font = new System.Drawing.Font("微软雅黑", 12);
g.DrawString("〇", font, brush, tRectangleF, sf);
font = new System.Drawing.Font("微软雅黑", 11);
tRectangleF.X = tx + 2;
tRectangleF.Y = tRectangleF.Y - 1;
g.DrawString("×", font, brush, tRectangleF, sf);
}
}
}
if (this.GetTabRect(i).Contains(e.Location) && tp == this.SelectedTab)
{
if (index != -1 && index != this.SelectedIndex)
{
g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(index));
RectangleF tRectangleF = this.GetTabRect(index);
tRectangleF.X += TextLeft;
g.DrawString(this.Controls[index].Text, this.Font, brush, tRectangleF, sf);
using (Pen objpen = new Pen(Color.Black))
{
int tx = (int)(tRectangleF.X + (tRectangleF.Width - 30));
tRectangleF.X = tx - 2;
Font font = new System.Drawing.Font("微软雅黑", 12);
g.DrawString("〇", font, brush, tRectangleF, sf);
font = new System.Drawing.Font("微软雅黑", 11);
tRectangleF.X = tx + 2;
tRectangleF.Y = tRectangleF.Y - 1;
g.DrawString("×", font, brush, tRectangleF, sf);
}
}
index = -1;
}
}
}
catch (Exception)
{
}
Count = 0;
base.OnMouseMove(e);
} protected override void OnMouseLeave(EventArgs e)
{
try
{
Graphics g = this.CreateGraphics();
if (index != -1 && this.TabPages[index] != this.SelectedTab)
{
g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(index));
SolidBrush brush = new SolidBrush(FontColor);
RectangleF tRectangleF = this.GetTabRect(index);
StringFormat sf = new StringFormat();//封装文本布局信息
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Near;
tRectangleF.X += TextLeft;
g.DrawString(this.Controls[index].Text, this.Font, brush, tRectangleF, sf);
using (Pen objpen = new Pen(Color.Black))
{
int tx = (int)(tRectangleF.X + (tRectangleF.Width - 30));
tRectangleF.X = tx - 2;
Point p5 = new Point(tx, 8);
Font font = new System.Drawing.Font("微软雅黑", 12);
g.DrawString("〇", font, brush, tRectangleF, sf);
font = new System.Drawing.Font("微软雅黑", 11);
tRectangleF.X = tx + 2;
tRectangleF.Y = tRectangleF.Y - 1;
g.DrawString("×", font, brush, tRectangleF, sf);
}
}
}
catch (Exception)
{
}
index = -1;
base.OnMouseLeave(e);
}
/// <summary>
/// 重绘控件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tabMenu_DrawItem(object sender, DrawItemEventArgs e)
{
this.SetStyle(
ControlStyles.UserPaint | // 控件将自行绘制,而不是通过操作系统来绘制
ControlStyles.OptimizedDoubleBuffer | // 该控件首先在缓冲区中绘制,而不是直接绘制到屏幕上,这样可以减少闪烁
ControlStyles.AllPaintingInWmPaint | // 控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁
ControlStyles.ResizeRedraw | // 在调整控件大小时重绘控件
ControlStyles.SupportsTransparentBackColor, // 控件接受 alpha 组件小于 255 的 BackColor 以模拟透明
true); // 设置以上值为 true
this.UpdateStyles();
} //关闭按钮功能
private void MainTabControl_MouseDown(object sender, MouseEventArgs e)
{
int closeSize = 20;
if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y;
//计算关闭区域
Rectangle tab = this.GetTabRect(this.SelectedIndex);
tab.Offset(tab.Width - (closeSize + 3), 4);
tab.Width = closeSize;
tab.Height = closeSize; if (this.TabCount == 1) return; //如果鼠标在区域内就关闭选项卡
bool isClose = x > tab.X && x < tab.Right && y > tab.Y && y < tab.Bottom;
if (isClose == true)
{
this.TabPages.Remove(this.SelectedTab);
}
}
} }
}
实例二:
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms; namespace KUN.CONTROL.LIB.CONTROL
{
public partial class KTabControl : System.Windows.Forms.TabControl
{
[Browsable(true), Description("整个控件的背景色"), Category("外观")]
public Color TabControlBackColor { get; set; } [Browsable(true), Description("Tab的标题栏边框颜色"), Category("外观")]
public Color TabBorderColor { get; set; } [Browsable(true), Description("当前激活Tab的标题栏背景色"), Category("外观")]
public Color ActivedTabBackColor { get; set; } [Browsable(true), Description("当前激活Tab的标题文字颜色"), Category("外观")]
public Color ActivedTabLabelColor { get; set; } [Browsable(true), Description("未激活Tab的标题栏背景色"), Category("外观")]
public Color InActivedTabBackColor { get; set; } [Browsable(true), Description("未激活Tab的标题文字颜色"), Category("外观")]
public Color InActivedTabLabelColor { get; set; } [Browsable(true), Description("Tab标题栏的大小"), Category("外观")]
public Size TabSize { get; set; } public KTabControl()
{
this.InitializeComponent(); TabSet(); this.TabBorderColor = Color.Black;
this.ActivedTabLabelColor = Color.Black;
this.InActivedTabLabelColor = Color.Black;
this.ActivedTabBackColor = Color.White;
this.InActivedTabBackColor = Color.FromArgb(0, 192, 192);
this.TabControlBackColor = Color.Transparent;
this.TabSize = new Size(100, 35);
} protected override void OnMouseDoubleClick(MouseEventArgs e)
{
if (this.TabPages.Count == 1) return;
this.TabPages.RemoveAt(this.SelectedIndex);
} protected override void OnPaint(PaintEventArgs e)
{
Rectangle tcRec = this.ClientRectangle;//整个tabControl的边框
e.Graphics.FillRectangle(new SolidBrush(this.TabControlBackColor), tcRec); for (int i = 0; i < this.TabPages.Count; i++)
{
Rectangle tabRectangle = new Rectangle(1, 1 + i * TabSize.Height, TabSize.Width, TabSize.Height);
SolidBrush brush = new SolidBrush(this.InActivedTabLabelColor);
StringFormat sf = new StringFormat();//封装文本布局信息
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
if (i == this.SelectedIndex)
{
brush = new SolidBrush(this.ActivedTabLabelColor);
e.Graphics.FillRectangle(new SolidBrush(ActivedTabBackColor), tabRectangle);
e.Graphics.DrawRectangle(new Pen(this.TabBorderColor), tabRectangle);
}
else
{
e.Graphics.FillRectangle(new SolidBrush(InActivedTabBackColor), tabRectangle);
e.Graphics.DrawRectangle(new Pen(this.TabBorderColor), tabRectangle);
}
e.Graphics.DrawString(this.Controls[i].Text, this.Font, brush, tabRectangle, sf);
}
} /// <summary>
/// 设定控件绘制模式
/// </summary>
private void TabSet()
{
this.DrawMode = TabDrawMode.OwnerDrawFixed;
this.Alignment = TabAlignment.Left;
this.SizeMode = TabSizeMode.Fixed;
this.Multiline = true;
base.SetStyle(
ControlStyles.UserPaint |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw |
ControlStyles.SupportsTransparentBackColor,
true);
base.UpdateStyles();
} public override Rectangle DisplayRectangle
{
get
{
Rectangle rect = base.DisplayRectangle;
return new Rectangle(rect.Left - 3, rect.Top - 3, rect.Width + 6, rect.Height + 5);
}
}
}
}
C# Winfrom TabControl美化的更多相关文章
- C# Winfrom UI 美化
Winfrom UI 美化 此处只做演示,未进行页面布局.... 1.CSkin:此处只显示一种样式供参考,可继承其他样式——略 2.MetroFramework.Design 3.Ribbon 4. ...
- Winform 中tabcontrol 美化
需要对tabcontrol按照美工出的图进行美化 对tabpage页进行标题设置,首先对整个tabcontrol的DrawMode设置为OwnerDrawFixed,由于需要对标题宽度有要求,设置si ...
- WPF TabControl美化
<Window.Resources> <!-- TabItem的样式 --> <Style TargetType="{x:Type TabItem}" ...
- Winfrom UI 美化 MetroModernUI库应用实例
使用方式: 选择项目==>右键==>管理NuGet安装包==>输入Metro==> ==>添加选项卡(自定义命名,例如Metrol UI)==>浏览 ==>加 ...
- C# winform 界面美化技巧(扁平化设计)
关于C#界面美化的一些小技巧 在不使用第三方控件如 IrisSkin 的前提下,依然可以对winform做出让人眼前一亮的美化 首先,我们先来实现主界面的扁平化 此处分为两个步骤,第一步是更改winf ...
- WPF自定义TabControl样式
WPF自定义TabControl,TabControl美化 XAML代码: <TabControl x:Class="SunCreate.Common.Controls.TabCont ...
- Winform 美化
首先,我们先来实现主界面的扁平化 此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件. 将主窗体FormBorderStyle更改为None,这样就得到了 ...
- 使用Blend设计出符合效果的WPF界面
之前不会用blend,感觉好难的,但美工给出的效果自己有没办法实现,所以研究了一下blend,感觉没有想象中的那么难 废话不多说,开始界面设计 今天拿到美工给的一个界面效果图 这个界面说实话,还可以吧 ...
- TabControl控件的美化
文件下载:http://files.cnblogs.com/zfanlong1314/TabControlEX.rar 本文转载:http://www.cnblogs.com/lmlblog/arch ...
随机推荐
- 关于比较js中两个对象相等 ==
“如果两个操作数都是对象,则比较他们是不是同一个对象(引用的对象在内存中的地址一样),如果两个操作数都指向同一个对象,则相等操作符返回true,否则,返回false”. 我做了一个例子 functio ...
- Flutter 的一些小技巧
1. 获取状态栏高度 import 'dart:ui'; MediaQueryData.fromWindow(window).padding.top 2. 设置AppBar的高度 Scaffold( ...
- SSRF小梳理
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内部系统.(正 ...
- OpenCV.用户选择
1.Pdf.P153(书.P122) 2. // 来自:"Creating a video with OpenCV — OpenCV 2.4.13.7 documentation.html& ...
- 最新 巨人网络java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.巨人网络等10家互联网公司的校招Offer,因为某些自身原因最终选择了巨人网络.6.7月主要是做系统复习.项目复盘.Leet ...
- Django边角料
模型层表名自定义: class Record(models.Model): content=models.CharField(max_length=32,db_column='record_conte ...
- Docker pull php:7.1-fpm的php.ini配置修改
今天,换了 Deepin 操作系统,开发环境是通过 Docker 搭建的,具体结构如下: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e ...
- 【AI】【人工智能】【计算机】人工智能工程技术人员等职业信息公示
人社厅发[2019]48号 各省.自治区.直辖市及新疆生产建设兵团人力资源社会保障厅(局).市场监管局.统计局,国务院各部门.各直属机构.各中央企业.有关社会组织人事劳动保障工作机构,中央军委政治工作 ...
- SQL SERVER导入EXCEL文件:无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OLEDB.12.0" 的实例。
[方法一] --开启导入功能 exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'A ...
- Shell脚本之流程控制(if、for、while)
if 判断 if语句的三种格式: (1)if (2)if else (3)if elif else 语法格式如下: #if 语法格式 if 条件 then 命令1... 命令2... fi #if e ...