博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Winform TabControl标签美化
阅读量:4027 次
发布时间:2019-05-24

本文共 3940 字,大约阅读时间需要 13 分钟。

前期工作:

加载资源文件,双击“Resources.resx"
在这里插入图片描述
类型选择Images
在这里插入图片描述
【添加资源】——【添加现有文件】
在这里插入图片描述
选择需要添加的图片文件,保存即可。
在下面的资源文件夹中即可看到添加的图片列表
在这里插入图片描述
**方法一:**重绘标签及背景
新建窗体,命名为"OtherForm.cs"
窗体布局如图:
在这里插入图片描述
将【tabControl】控件的【DrawMode】属性修改为”OwnerDrawFixed“
在这里插入图片描述
设计界面变为
在这里插入图片描述
tabControl控件的事件属性页,添加【DrawItem】事件
在这里插入图片描述
编辑【DrawItem】事件

private void tabControl2_DrawItem(object sender, DrawItemEventArgs e)        {
//加载背景图片 Image imgButton = Properties.Resources.p4; Image imgBJ = Properties.Resources.p5; //绘制主控件的背景 Rectangle Rect = new Rectangle(0, 0, this.tabControl2.Width, this.tabControl2.Height); e.Graphics.DrawImage(imgBJ, Rect); //新建一个StringFormat对象,用于对标签文字的布局设置 StringFormat stringFormat = new StringFormat(); stringFormat.LineAlignment = StringAlignment.Center; // 设置文字垂直方向居中 stringFormat.Alignment = StringAlignment.Center; // 设置文字水平方向居中 SolidBrush bruFont = new SolidBrush(Color.FromArgb(255, 255, 255));// 标签字体颜色 Font font = new System.Drawing.Font("楷体", 10F, FontStyle.Bold);//设置标签字体样式 //绘制标签样式 for (int i = 0; i < tabControl2.TabPages.Count; i++) {
//获取标签头的工作区域 Rectangle rec = tabControl2.GetTabRect(i); Rectangle newRect = new Rectangle(rec.Left - 7, rec.Top, rec.Width - 7, rec.Height); //绘制标签头背景颜色 e.Graphics.DrawImage(imgButton, newRect); //绘制标签头的文字 e.Graphics.DrawString(tabControl2.TabPages[i].Text, font, bruFont, newRect, stringFormat); } }

运行结果

在这里插入图片描述
**方法二:**重写TabControl控件
重写TabControl控件可以改变其背景为透明或绘制背景图,绘制标签风格等各种,但是在X64编辑环境下,重写的控件无法直接拖拽到界面进行设计,需要在修改”main.Designercs"中修改代码。
新建窗体,命名为"main.cs"
窗体布局如图:
在这里插入图片描述
在main.cs文件中加入以下代码

public class TabControlEx : TabControl        {
private Color _BackColor; //背景颜色 public TabControlEx() {
this.SetStyle(ControlStyles.UserPaint, true);//用户自己绘制 this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); // this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); //让控件支持透明色 this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.UpdateStyles(); } public override Color BackColor {
//重写backcolor属性 get {
return this._BackColor; } set {
this._BackColor = value; } } protected override void OnPaint(PaintEventArgs e) {
this.DrawTitle(e.Graphics); base.OnPaint(e); } protected virtual void DrawTitle(Graphics g) {
Image imgButton = Properties.Resources.p; StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; Font font = new System.Drawing.Font("微软雅黑", 10F, FontStyle.Bold);//设置标签字体样式 using (SolidBrush sb = new SolidBrush(Color.FromArgb(127, 0, 0, 0))) {
for (int i = 0; i < this.TabPages.Count; i++) {
Rectangle rect = this.GetTabRect(i); Rectangle newRect = new Rectangle(rect.Left + 7, rect.Top, rect.Width - 7, rect.Height); g.DrawImage(imgButton, newRect); g.DrawString(this.TabPages[i].Text, font, Brushes.White, rect, sf); } } } }

在这里插入图片描述

注:上面有些代码是不需要的,是其他功能的。
在main.Designer.cs中将原来的this.tabControl = new System.Windows.Forms.TabControl();改为this.tabControl = new TabControlEx();
在这里插入图片描述
在这里插入图片描述
程序运行结果:
在这里插入图片描述

转载地址:http://lnabi.baihongyu.com/

你可能感兴趣的文章
android 代码实现圆角
查看>>
postman调试webservice接口
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
Android DataBinding使用2-Recycleview
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
关于activity保存页面状态的两个方法
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
关于let{a}=B出现的解构赋值
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
android给文字加边框(修改不能居中的问题)
查看>>
coursesa课程 Python 3 programming course_2_assessment_1
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>