C# Winform TabControl标签,背景设置图片

2023-12-22 06:08

本文主要是介绍C# Winform TabControl标签,背景设置图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

改变TabControl的风格有两个方式,1、直接重绘标签及背景;2、重写TabControl控件

1、直接重绘标签及背景

1)设置TabControl属性DrawMode为OwnerDraw 

2)添加事件代码

private void tabControl_DrawItem(object sender, DrawItemEventArgs e){                        Image imgButton = Mana.Properties.Resources.button;Image imgBJ = Mana.Properties.Resources.bg3;//绘制主控件的背景Rectangle Rect = new Rectangle(0, 0, this.tabControl.Width, this.tabControl.Height);e.Graphics.DrawImage(imgBJ, Rect);//新建一个StringFormat对象,用于对标签文字的布局设置StringFormat StrFormat = new StringFormat();StrFormat.LineAlignment = StringAlignment.Center;// 设置文字垂直方向居中StrFormat.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 < tabControl.TabPages.Count; i++){//获取标签头的工作区域Rectangle recChild = tabControl.GetTabRect(i);Rectangle newRect = new Rectangle(recChild.Left - 7, recChild.Top, recChild.Width - 7, recChild.Height);//绘制标签头背景颜色e.Graphics.DrawImage(imgButton, newRect);//绘制标签头的文字e.Graphics.DrawString(tabControl.TabPages[i].Text, font, bruFont, newRect, StrFormat);}Console.WriteLine("tabControl_DrawItem"+"  "+countTest .ToString ());countTest++;}

2、重写TabControl控件

重写TabControl控件可以改变其背景为透明或绘制背景图,绘制标签风格等各种,但是有一个问题是,在X64编辑环境下,重写的控件无法直接拖拽到界面进行设计,只能通过设计器代码InitializeComponent()中将原先用的this.tabControl = new System.Windows.Forms.TabControl();改为this.tabControl = new TabControlEx();,此时,则不能打开设计界面,会报错,但是仍然有效

重写控件代码(拷贝的网上的):

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 = OcvMana.Properties.Resources.button;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);}}}}

此时New 了新的控件后,直接调试运行发现TabPage页仍然不透明,可在页面Load事件中设置选中第一个页面的同时设置其背景色为透明或其他颜色,代码如下:

this.tabControl.SelectedTab = tp1;    //选择要显示页面1
tp1.BackColor = Color.FromArgb(0, 255, 255, 255);     //设置页面1的背景透明

这篇关于C# Winform TabControl标签,背景设置图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/522815

相关文章

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速