当前位置: 首页 > article >正文

c#的tabControl控件实现自定义标签颜色

最近项目需要自定义tabControl控件颜色,而默认这个控件是不支持自定义标签颜色的,于是想办法实现了这个功能,效果如下图所示:

直接上代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CustomTabControl
{
    public partial class Form1 : Form
    {
        private TabControl tabControl;
        private TabPage tabPage1;
        private TabPage tabPage2;
        private TabPage tabPage3;

        public Form1()
        {
            // 初始化控件
            tabControl = new TabControl();
            tabPage1 = new TabPage("红");
            tabPage2 = new TabPage("绿");
            tabPage3 = new TabPage("蓝");

            // 添加 TabPage 到 TabControl
            tabControl.TabPages.Add(tabPage1);
            tabControl.TabPages.Add(tabPage2);
            tabControl.TabPages.Add(tabPage3);

            // 设置 TabControl 的位置和大小
            tabControl.Location = new Point(25, 25);
            tabControl.Size = new Size(300, 200);

            // 设置 TabControl 为 OwnerDrawFixed 模式
            tabControl.DrawMode = TabDrawMode.OwnerDrawFixed;
            tabControl.DrawItem += new DrawItemEventHandler(tabControl_DrawItem);

            // 添加 TabControl 到 Form
            this.Controls.Add(tabControl);

            // 设置 Form 的一些属性
            this.Text = "Custom TabControl Example";
            this.Size = new Size(350, 250);
        }

        // 处理 DrawItem 事件,自定义绘制 TabPage 标签
        private void tabControl_DrawItem(object sender, DrawItemEventArgs e)
        {
            TabControl tc = (TabControl)sender;
            TabPage tp = tc.TabPages[e.Index];

            // 获取标签的边界
            Rectangle tabRect = tc.GetTabRect(e.Index);

            // 选择背景颜色
            Color backgroundColor;
            switch (tp.Text)
            {
                case "红":
                    backgroundColor = Color.Red;
                    break;
                case "绿":
                    backgroundColor = Color.Green;
                    break;
                case "蓝":
                    backgroundColor = Color.Blue;
                    break;
                default:
                    backgroundColor = SystemColors.Control; // 默认背景颜色
                    break;
            }

            // 绘制背景
            using (SolidBrush backgroundBrush = new SolidBrush(backgroundColor))
            {
                e.Graphics.FillRectangle(backgroundBrush, tabRect);
            }

            // 使用系统默认的文字颜色绘制标签文本
            TextRenderer.DrawText(e.Graphics, tp.Text, tc.Font, tabRect, SystemColors.ControlText, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
        }
    }
}


http://www.kler.cn/a/516545.html

相关文章:

  • vim在命令模式下的查找功能
  • 华为OD机试真题---战场索敌
  • Spark Streaming的核心功能及其示例PySpark代码
  • postgresql15的启动
  • Debian 上安装PHP
  • Mysql面试题----为什么B+树比B树更适合实现数据库索引
  • 【SpringBoot实现xss防御】
  • 期权帮|在股指期货中超过持仓限额怎么办?
  • 【Redis】持久化机制
  • 【JVM】垃圾收集器详解
  • 解决CentOS9系统下Zabbix 7.2图形中文字符乱码问题
  • 4_高并发内存池项目_高并发池内存释放设计_ThreadCache/CentralCache/PageCache回收并释放内存
  • 人工智能技术在低空经济产业的应用
  • MyBatis-Plus之BaseMapper
  • 关于为什么java中nextInt()和nextLine()不能混用 | nextInt()和nextInt()之类的可以一起用
  • 设计模式Python版 简单工厂模式
  • OpenEuler学习笔记(十):用OpenEuler搭建web服务器
  • 【MCU】DFU、IAP、OTA
  • cursor重构谷粒商城05——docker容器化技术快速入门【番外篇】
  • Mac 查看 Java SDK 和 Android SDK 的路径
  • 输入网址到网页显示,发生了什么--讲述
  • linux静态库+嵌套makefile
  • 【深度学习】 自动微分
  • python学opencv|读取图像(四十三)使用cv2.bitwise_and()函数实现图像按位与运算
  • Caesar
  • 【java】IP来源提取国家地址