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;也不会自动上线。

简单了解TCP/IP四层模型

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

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

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

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…

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

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

【深度学习笔记】优化算法——学习率调度器

学习率调度器 &#x1f3f7;sec_scheduler 到目前为止&#xff0c;我们主要关注如何更新权重向量的优化算法&#xff0c;而不是它们的更新速率。 然而&#xff0c;调整学习率通常与实际算法同样重要&#xff0c;有如下几方面需要考虑&#xff1a; 首先&#xff0c;学习率的大…

cefsharp(winForm)调用js脚本,js脚本调用c#方法

本博文针对js-csharp交互(相互调用的应用) (一)、js调用c#方法 1.1 类名称:cs_js_obj public class cs_js_obj{//注意,js调用C#,不一定在主线程上调用的,需要用SynchronizationContext来切换到主线程//private System.Threading.SynchronizationContext context;//…

Elasticsearch 分享

一、Elasticsearch 基础介绍 ElasticSearch 是分布式实时搜索、实时分析、实时存储引擎&#xff0c;简称&#xff08;ES)&#xff0c; 成立于2012年&#xff0c;是一家来自荷兰的、开源的大数据搜索、分析服务提供商&#xff0c;为企业提供实时搜索、数据分析服务&#xff0c;…

AHU 汇编 实验四

实验名称&#xff1a;实验四 两个数的相乘 实验内容&#xff1a; 用子程序形式编写&#xff1a; A*B&#xff1a;从键盘输入a和b&#xff0c;计算A*B&#xff0c;其中乘法采用移位和累加完成 实验过程&#xff1a; 源代码&#xff1a; data segmentmul1 db 16,?,16 dup(?…

树莓派安装Nginx服务搭建web网站结合内网穿透实现公网访问本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

什么是高级编程语言?——跟老吕学Python编程

什么是高级编程语言&#xff1f;——跟老吕学Python编程 高级编程语言简介高级编程语言发展历程高级编程语言特点高级编程语言分类命令式语言函数式语言逻辑式语言面向对象语言 常见的高级编程语言及其特点和应用领域高级编程语言性能分析高级编程语言的工作方式 高级编程语言简…