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

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;
http://www.lryc.cn/news/222030.html

相关文章:

  • Win10系统下torch.cuda.is_available()返回为False的问题解决
  • 零代码编程:用ChatGPT批量将Mp4视频转为Mp3音频
  • 微服务项目,请求从发出到后端处理器的历程
  • pandas教程:String Manipulation 字符串处理和正则表达式re
  • Apache Doris 是什么
  • 【NeurIPS 2020】基于蒙特卡罗树搜索的黑箱优化学习搜索空间划分
  • 面试题:线上MySQL的自增id用尽怎么办?
  • Java集合框架:Collection 与 Map 接口深度解析
  • qt多线程例子,不断输出数字
  • 基于厨师算法的无人机航迹规划-附代码
  • 设计模式的六大原则
  • 原文远知行COO张力加盟逐际动力 自动驾驶进入视觉时代?
  • 【公益案例展】火山引擎公益电子票据服务——连接善意,共创美好
  • postman中文乱码
  • 设计模式简要介绍
  • LeetCode-232. 用栈实现队列(C++)
  • 无人机红外相机的畸变矫正
  • C++编程案例讲解-基于结构体的控制台通讯录管理系统
  • ASP.NETCore6开启文件服务允许通过url访问附件(图片)
  • python爬取Web of science论文信息
  • 本地域名 127.0.0.1 / localhost
  • Python —— 不同类型的数据长度计算方式
  • NowCoder | 环形链表的约瑟夫问题
  • 华为政企数据中心网络交换机产品集
  • 多门店自助点餐+外卖二合一小程序源码系统 带完整搭建教程
  • kafka可视化工具
  • Excel 转 Json 、Node.js实现(应用场景:i18n国际化)
  • Redis7--基础篇2(Redis的十大数据类型及常用命令)
  • 1.HTML中网页介绍
  • 执行sql报错only_full_group_by的解决方法