C# TabControl实现为每一个TabPage添加关闭按钮

2023-11-09 06:52

本文主要是介绍C# TabControl实现为每一个TabPage添加关闭按钮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

默认情况下TabControl是无法通过界面关闭TabPage的
在这里插入图片描述

有些情况下我们需要手动关闭任意一个TabPage,如下图所示
在这里插入图片描述

TabControl控件自带属性是无法满足以上需求,下面简单介绍实现过程

1、首先需要对TabPage进行重绘,其目的是为了在TabPage上画出来一个"❌"符号。
(1)重绘前需要将TabControl的 DrawMode属性设置为OwnerDrawFixed。否则DrawDown事件不起作用
(2)在窗体Load事件中设置TabControl的Padding属性(增加TabPage的显示宽度,为"❌"符号让出位置): tabc.Padding = new Point(10, 0);

  //tabc是TabControl的Nameprivate void tabc_DrawItem(object sender, DrawItemEventArgs e){Graphics g = e.Graphics;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;Rectangle rect = tabc.GetTabRect(e.Index);TabPage page = tabc.TabPages[e.Index];SolidBrush brushBack;SolidBrush brushFront;string text = page.Text;//TabPage被选中时显示不同的前景色和背景色if (tabc.SelectedTab == page){brushBack = new SolidBrush(Color.Black);brushFront = new SolidBrush(Color.White);}else{brushBack = new SolidBrush(Color.White);brushFront = new SolidBrush(Color.Black);}g.FillRectangle(brushBack, rect);Font font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));g.DrawString(text, new Font("宋体", 12f), brushFront, rect.X + 2, rect.Y + 5);g.DrawString("×", font, brushFront, rect.Right - 22, rect.Bottom - 18);}

2、对按钮添加关闭事件(删除TabPage事件)

 private void tabc_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Right)return;TabPage page = tabc.SelectedTab;Rectangle rect = tabc.GetTabRect(tabc.SelectedIndex);Rectangle rect1 = new Rectangle(rect.Right - 22, rect.Y, 22, rect.Height);int x = e.X;int y = e.Y;//判断鼠标位置是否位于“❌”的范围内if (x > rect1.X && x < rect1.Right && y > rect1.Y && y < rect1.Bottom){          tabc.TabPages.Remove(page);}}

另附上通过代码对TabControl添加TabPage的实现过程

 TabPage tabPage = new TabPage{Name = "name",Text = "text"};tabc.TabPages.Add(tabPage);tabc.SelectedTab = tabPage;

这篇关于C# TabControl实现为每一个TabPage添加关闭按钮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/374574

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

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

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

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import