WinForm 修改TableControl背景和标签

 在界面设计中,TableControl控件经常使用。默认设置中,TabControl的背景和标签样式。接下来我们将学习如何修改TableControl的标签选项、修改TabControld的背景色或背景图片。页面效果如下:

简述原理

  TableControl项目属性DrawMode,将属性值设定为OwnerDrawFixed后,就可以由用户绘制标签。添加DrawItem事件(用户需要绘制Table时触发),然后在该方法中绘制自定义的标签即可。

关键代码

  设置DrawMode属性。

this.tabControl_main.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
    为TabControl添加DrawItem事件。
this.tabControl_main.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl_main_DrawItem);
   设置笔刷。
//设置笔刷
SolidBrush red = new SolidBrush(Color.Red);              // 红色
  绘制背景。
//绘制红色背景
Rectangle rectangleRed = tabControl_main.GetTabRect(0);
e.Graphics.FillRectangle(red, rectangleRed);

  设置文字对齐属性。

//设置文字居中对齐 
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;

  设置标签文本。

//设置文字字体和文字大小
e.Graphics.DrawString(tabControl_main.TabPages[i].Text , new Font("宋体",10) ,black ,rec , stringFormat);

   获取工作区域

 Rectangle recMain = tabControl_main.ClientRectangle;        //获取Table控件的工作区域
  添加背景图片
 //获取背景图片,我的背景图片在项目资源文件中。
Image backImage = Resources.bg_banner;
//绘制主控件的背景
e.Graphics.DrawImage(backImage, 0, 0, tabControl_main.Width, tabControl_main.Height);

 

步骤

设置标签

  • 在WinForm页面添加TableControl控件,完成基本的设置。这里设置TableControl控件名称为tabControl_main,并添加三个选项卡,选项卡的关联文本分别为红色、黄色、蓝色。 

  • 设置DrawMode为OwnerDrawFixed。DrawMode属性的含义为指示是由用户还是由系统绘制标题。由于需要自定义标签背景色,所以由用户来绘制标题。

在页面中设置tabControl_main中设置DrawMode属性。

或者*.Designer.cs文件中,设置DrawMode属性。

this.tabControl_main.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
  •  为TabControl添加DrawItem事件(每当需要绘制特定项/特定区域时发生)。

  或者在*.Designer.cs页面代码如下:

this.tabControl_main.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl_main_DrawItem);
  • 设置背景标签。包括设置笔刷、绘制背景、设置文字。代码如下:
using System.Drawing;
using System.Windows.Forms;
//……
/// <summary>/// 初始化tableControl选项时的颜色/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void tabControl_main_DrawItem(object sender, DrawItemEventArgs e){//设置笔刷SolidBrush red = new SolidBrush(Color.Red);              // 红色SolidBrush yellow = new SolidBrush(Color.Yellow);        //黄色SolidBrush blue = new SolidBrush(Color.Blue);             //蓝色SolidBrush black = new SolidBrush(Color.Black);            //黑色          //设置背景//绘制红色背景Rectangle rectangleRed = tabControl_main.GetTabRect(0);e.Graphics.FillRectangle(red, rectangleRed);//绘制黄色背景Rectangle rectangleYellow = tabControl_main.GetTabRect(1);e.Graphics.FillRectangle(yellow, rectangleYellow);//绘制黄色背景Rectangle rectangleBlue = tabControl_main.GetTabRect(2);e.Graphics.FillRectangle(blue, rectangleBlue);//设置标签文字居中对齐StringFormat stringFormat = new StringFormat();stringFormat.Alignment = StringAlignment.Center;//设置标签文字for (int i = 0; i <tabControl_main.TabPages.Count; i ++){Rectangle rec = tabControl_main.GetTabRect(i);//设置文字字体和文字大小e.Graphics.DrawString(tabControl_main.TabPages[i].Text , new Font("宋体",10) ,black ,rec , stringFormat);}}
//……
启动后运行效果如下:

设置背景色或背景图片

  • 在WinForm页面添加TableControl控件(这里命名为tabControl_main),默认情况下,可以修改Tab的背景色为上一个容器的颜色。

  当修改DrawMode属性为OwnerDrawFixed时,背景色默认为系统颜色(灰色)。如下图:

 

 

  •  设置DrawMode为OwnerDrawFixed。DrawMode属性的含义为指示是由用户还是由系统绘制标题。由于需要自定义标签背景色,所以由用户来绘制标题。

  在页面中设置tabControl_main中设置DrawMode属性。

或者*.Designer.cs文件中,设置DrawMode属性:

this.tabControl_main.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed;
  • 为TabControl添加DrawItem事件(每当需要绘制特定项/特定区域时发生)。

  或者在*.Designer.cs页面代码如下:

this.tabControl_main.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl_main_DrawItem);
  • 在tabControl_main_DrawItem中添加背景颜色代码如下:
using System.Drawing;
using System.Windows.Forms;
//……
private void tabControl_main_DrawItem(object sender, DrawItemEventArgs e) {
//……
SolidBrush tab_blackColr = new SolidBrush(Color.Black);     // 笔刷背景Rectangle recMain = tabControl_main.ClientRectangle;        //获取Table控件的工作区域e.Graphics.FillRectangle(tab_blackColr , recMain);          //绘制TabControl背景
//……
}
//…

   运行效果如下:

 

 

  • 在tabControl_main_DrawItem中添加背景图片代码如下:
using System.Drawing;
using System.Windows.Forms;
//……
private void tabControl_main_DrawItem(object sender, DrawItemEventArgs e) {
//……
//获取背景图片,我的背景图片在项目资源文件中。Image backImage = Resources.bg_banner;//绘制主控件的背景e.Graphics.DrawImage(backImage, 0, 0, tabControl_main.Width, tabControl_main.Height);
//……
}
//……

 

  运行效果如下:

参考网址

  [1] https://jingyan.baidu.com/article/8ebacdf0caf35649f75cd562.html

  [2] https://www.cnblogs.com/jfbloc/archive/2011/11/12/2246549.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源工程】数字孪生工厂~工业上楼解决方案

飞渡科技数字孪生轻工厂管理平台&#xff0c;基于数字孪生技术驱动的智能&#xff0c;结合物联网IOT实现的联接&#xff0c;以及大数据分析生成的融合共享数据&#xff0c;实现生产过程的智能化监控和管理&#xff0c;实现设备之间的互联互通和协同工作。 通过智能算法&#xf…

前端报错404,nginx正常、gateway没有转发请求

问题描述&#xff1a;前端报错 404 Not Found 原因&#xff1a;nacos中对应服务没有上线&#xff0c;下线后&#xff0c;可以启动本地服务&#xff0c;然后在测试上调试代码。&#xff01;&#xff01; 记住重启对应服务&#xff0c;也不会自动上线。

Linux-TCP并发模型-013

1【TCP】多线程模型 2【IO】模型 2.1阻塞IO 没有数据到来时&#xff0c;可以让任务挂起&#xff0c;节省CPU资源开销&#xff0c;提高系统效率2.2非阻塞IO 程序未收到数据时一直执行&#xff0c;效率很低2.3异步IO 只能绑定一个文件描述符用来读取数据2.4多路复用IO 2.4.…

电商数据分析19——数据分析在电商平台价格弹性研究中的应用

目录 写在开头1. 价格弹性的基本理论1.1 价格弹性的定义1.2 价格弹性对销售和利润的影响1.2.1 如何通过价格弹性预测销量变化1.2.2 价格弹性高和低对企业策略的影响2 数据分析方法在价格弹性研究中的应用2.1 收集与处理销售和价格数据2.1.1 收集数据2.1.2 数据处理2.2 使用统计…

linux设置开机启动慎用nohup

我机器ubuntu9,设置开机启动我的应用程序&#xff0c;这个大家都知道只要在/etc/rc.local中加上一条shell启动命令就可以了。 但我确碰到了一个奇怪的问题&#xff1a;无法启动我的应用程序。 由于我的程序是java写的&#xff0c;一直怀疑是classpath问题&#xff0c;检查多次没…

简单了解TCP/IP四层模型

什么是计算机网络&#xff1f; 计算机网络我们可以理解为一个巨大的城市地图&#xff0c;我们想从A地前往B地&#xff0c;其中要走的路、要避开的问题都交给计算机网络解决&#xff0c;直到我们可以正常的到达目的地&#xff0c;那么我们会把其中的过程抽象成一个网络模型&…

矩阵求导笔记

文章目录 1. ML中为什么需要矩阵求导2. 向量函数与矩阵求导初印象3. YX 拉伸术3.1 f(x)为标量&#xff0c;X为列向量3.2 f(x)为列向量&#xff0c;X 为标量3.3 f(x)为列向量&#xff0c;X 为列向量 4. 常见矩阵求导公式4.1 Y A T X YA^TX YATX4.2 Y X T A X YX^TAX YXTAX 1…

【计算机考研】408究竟有多难?

408的难点在于他涉及的范围太广了&#xff0c;备考408&#xff0c;你要准备四门课程&#xff0c;分别是数据结构&#xff0c;计算机组成原理&#xff0c;操作系统和计算机网络。 这四门课程的书加起来很厚&#xff0c;需要复习的知识点很多&#xff0c;虽然408有考纲&#xff…

ssl域名转发配置

需要申请一个域名&#xff0c;然后将服务器地址配置到一个另ip上。 1.阿里云服务器&#xff1a;数字证书管理服务/SSL 证书 新建一个免费子域名&#xff08;须在原有主域名下,把www可以改为test等字符&#xff09;&#xff0c;等待审核通过&#xff08;1分钟左右&#xff09…

PostgreSQL - 查看表膨胀空间

目录 使用pgstattuple插件查看表膨胀空间 死元组&膨胀系数清理 查看表占用磁盘空间大小是如何组成的 什么是fms和vm&#xff1f; 什么是TOAST&#xff1f; 查看表和其关联的TOAST表的oid的关系 方法一 方法二 参考文档 使用pgstattuple插件查看表膨胀空间 select…

<Linux> 初识线程

目录 前言&#xff1a; 一、什么是线程 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;线程理解 &#xff08;三&#xff09;线程与进程的关系 &#xff08;四&#xff09;简单实用线程 &#xff08;五&#xff09;重谈虚拟地址空间 1. 页表的大小 2…

检测虚拟机环境的常见技术

下面列出检测 VMware 虚拟机的常见技术&#xff1a; #include <iostream> #include <windows.h> #include <sysinfoapi.h> #include <comdef.h> #include <Wbemidl.h> #include <ShlObj.h> #include <LM.h> #include <TlHelp32.…

【C++】了解一下STL

个人主页 &#xff1a; zxctscl 如有转载请先通知 STL 1. 什么是STL2. STL的版本3. STL的六大组件4. STL的重要性5. 如何学习STL6. STL的缺陷 1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件…

Php和h5等静态文件的服务容器化部署(下)

一、接着上文 上文介绍了php/h5程序的部署过程&#xff0c;最后是通过slb把不同的服务暴露给外部。 本文试着把外部的配置交待清楚&#xff0c;包括&#xff1a; kong配置ingress配置 部署逻辑图见下&#xff1a; 总结&#xff1a; 去掉slb&#xff0c;引入ingress组件。…

蓝桥杯真题讲解:接龙序列

蓝桥杯真题讲解&#xff1a;接龙序列 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;接龙序列 二、暴力代码 // 暴力代码&#xff1a;DFS&#xff08;2^n&#xff09; #include<bits/stdc.h> #define endl \n #define deb(x) cout &…

零基础自学C语言|自定义类型:结构体

✈结构体类型的声明 前面我们在学习操作符的时候&#xff0c;已经学习了结构体的知识&#xff0c;这里稍微复习一下。 &#x1f680;结构体回顾 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 &#x1fa82;结构的声明 例如&a…

李彦宏:程序员职业将不复存在,会说话就能当程序员;ChatGPT 日耗电超 50 万度丨 RTE 开发者日报 Vol.161

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、…

中国社会科学院与美国杜兰大学金融管理硕士——二月二,抬头皆是惊喜

在繁忙的都市生活中&#xff0c;每个人都在为自己的未来打拼&#xff0c;寻找着属于自己的那片天空。二月二&#xff0c;龙抬头&#xff0c;象征着春天的到来&#xff0c;万物复苏。在这个特殊的日子里&#xff0c;对于那些追求学术与职业双重成就的人来说&#xff0c;&#xf…

vue常识

计算属性computed是Vue.js中一种方便的属性类型&#xff0c;用于在模板中进行复杂计算和逻辑处理。它们的特点是具有缓存机制&#xff0c;只有在相关依赖发生改变时才会重新计算&#xff0c;避免不必要的重复计算。 Vue.js 中的基础单位是组件。Vue.js的应用通常由一个个组件构…

AIGC——DreamTuner通过单张图片生成与该图片主题风格一致的新图像

简介 DreamTuner的能力在于从单个图像生成主体驱动的新通用方法&#xff0c;这意味着用户只需提供一张图片&#xff0c;DreamTuner就能帮助他们生成与原始图片在主题和风格上一致的新图像。 算法重要之处在于其通用性和个性化定制的能力。无论是需要根据特定主题或条件创建个…