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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.