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

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of