C# 利用TabControl控件制作多窗口切换

news2024/11/17 14:43:52

TabControl控件切换时触发的事件

选项卡切换触发的是TabControl控件的SelectedIndexChanged事件。
当TabControl控件的任何一个TabPage被点击或选择,即发生SelectedIndexChanged事件事件。
代码如下:

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
       {
            if (tabControl1.SelectedIndex == 0)//也可以判断tabControl1.SelectedTab.Text的值
            {
                //执行相应的操作
                tabPageSubject.Parent = tabControlExtract;//显示
            }
            else if (tabControl1.SelectedIndex == 1)
            {
                //执行相应的操作
                tabPageSubject.Parent = null;   //隐藏选项卡tabPageSubject
            }
        }

在这里插入图片描述

怎样判断 tabPage1 正在被选中 还是tabPage2 被选中?

 if (tabControl1.SelectedTab == tabPage1)
{
}
else
{
}

switch(tabControl1.SelectedTab)
{
     case tabPage1:
             //选择了tabPage1;
             break;
     case tabPage2:
              //选择了tabPage1;
              break;
     default:
              //选择了其他的tabPage
              break;
}

tabControl1.SelectedTab.Text.ToString()选项卡的名字
tabControl1.SelectedTab 可以获取选中的TabPage对象。
tabControl1.SelectedIndex 可以获取选中的TabPage对象的索引号。

实现伪切换窗口效果

1、添加 tabControl 控件、两个按钮控件;
在这里插入图片描述

2、代码如下:

		public TabPage[] tabpagebuf = new TabPage[4];
		//放到 Form1_Load 中调用
        public void Init_tabpagebuf()
        {
            tabpagebuf[0] = tabPage10;
            tabpagebuf[1] = tabPage11;
            tabpagebuf[2] = tabPage12;
            tabpagebuf[3] = tabPage13;

        }
        byte page_ix = 0;
        //上一步
        private void button13_Click(object sender, EventArgs e)
        {
            if(page_ix == 0)
            {
                page_ix = 3;
            }
            else
            {
                page_ix--;
            }
            tabControl4.SelectedTab = tabpagebuf[page_ix];
        }
        //下一步
        private void button12_Click(object sender, EventArgs e)
        {
            page_ix = (byte)((page_ix + 1) % 4);
            tabControl4.SelectedTab = tabpagebuf[page_ix];
        }

隐藏顶部的tab标签,及tabcontrol的边框线

处理tabcontrol控件,隐藏顶部的tab标签,及tabcontrol的边框线
隐藏顶部的tab标签

1、把TabPage的属性中将Text清空 。
2、选中TabControl,将属性SizeMode改为Fixed,
3、将属性:ItemSize设为0,1
4、将属性:TabStop,修改为fasle
以上四步,基本完美解决了,但左上角还是有遗留点。
5、将如下代码复制粘贴到form的load事件中,其中 tabControl1、tabPage1 改为自己的 tabControl 控件名字 (甚至可以直接只进行这一步)

this.tabControl1.Region = new Region(new RectangleF(this.tabPage1.Left, this.tabPage1.Top, this.tabPage1.Width, this.tabPage1.Height));

到了这里,已经实现完美隐藏,但若想要实现边框线,可以选中 tabControl4 -> Tabpages 将 BorderStyle改为 FixedSingle
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

隐藏边框线
1、自定义tabcontrol的集成类

public class CoverTabControl : TabControl
    {
        /// <summary>
        /// 解决系统TabControl多余边距问题
        /// </summary>
        public override Rectangle DisplayRectangle
        {
            get
            {
                Rectangle rect = base.DisplayRectangle;
                return new Rectangle(rect.Left - 4, rect.Top - 4, rect.Width + 8, rect.Height + 8);
            }
        }
    }

2、找到xxxx.design.cs文件
修改: this.tabControl1 = new System.Windows.Forms.TabControl();
为:this.tabControl1 = new CoverTabControl() ;
效果
在这里插入图片描述

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

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

相关文章

设计模式 --- 结构型模式

一、概述 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“合成复用原则”…

L2TP Client-initated场景

L2TP Client-initated场景 1. 原理 ![原理](https://img-blog.csdnimg.cn/66ce3169502b4252bca5d9d7a6c0027c.png)1.1 阶段1&#xff1a;创建L2TP隧道 C与LNS通过交互三条消息协商隧道ID、UDP端口&#xff08;1701&#xff09;、主机名称、L2TP版本、隧道验证等参数。 1.2 …

使用Spark实现词频统计

文章目录 一&#xff0c;词频统计准备工作&#xff08;一&#xff09;版本选择问题&#xff08;二&#xff09;安装Scala2.12.15&#xff08;三&#xff09;启动集群的HDFS与Spark&#xff08;四&#xff09;在HDFS上准备单词文件 二&#xff0c;本地模式运行Spark项目&#xf…

Meta的分割一切模型SAM( Segment Anything )测试

Meta不久前开源发布了一款图像处理模型&#xff0c;即分割一切模型&#xff1a;Segment Anything Model&#xff0c;简称 SAM&#xff0c;号称要从任意一张图片中分割万物&#xff0c;源码地址为&#xff1a; https://github.com/facebookresearch/segment-anything打开后看到…

ssm+java企业公司产品分销商管理系统

一、 二、经营管理&#xff1a; ①分销商每月提交自己进多少货物&#xff08;从总部进购了多少“鹊巢”的商品给自己负责区的大型商超&#xff09;——对应的种类一共进多少货物&#xff1b;该种类中具体的产品又进了多少货物具体到&#xff08;参考三产品管理模块&#xff09;…

RelativeLayout相对布局

一、官方地址&#xff1a; https://developer.android.google.cn/reference/kotlin/android/widget/RelativeLayout?hlen 二、概述 相对布局&#xff08;RelativeLayout&#xff09;是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式 三、基本格式 <RelativeLay…

Nacos注册中心的使用

文章目录 Nacos注册中心1. 服务注册到nacos1&#xff09;引入依赖2&#xff09;配置nacos地址3&#xff09;重启 2.服务分级存储模型2.1.给user-service配置集群2.2.同集群优先的负载均衡 3.权重配置 Nacos注册中心 国内公司一般都推崇阿里巴巴的技术&#xff0c;比如注册中心…

Docker安装Redis(普通安装+在线安装+离线安装)

文章目录 Redis概述一、磁盘安装1.1 安装环境1.2 安装步骤1.3 服务器启停命令 二、docker安装1.在线安装2.离线安装 总结 Redis概述 Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支…

ext-1:PDK工具包编译出例程

1、TI的单独StarterWare不更新后&#xff0c;后续维护和更新的是 PROCESSOR-SDK-AM335X 软件开发套件 &#xff08;PDK&#xff09;&#xff0c;对比以前的&#xff0c;里面没有例程&#xff0c;所以下载安装完需要自己编译出example例程。 因为编译出example例程中间会出现很…

设计模式--适配器模式

目录 基本介绍 工作原理 类适配模式 介绍 应用实例介绍 类适配器模式注意事项和细节 对象适配模式 介绍 对象适配器模式注意事项和细节 接口适配器模式 介绍 适配器模式的注意事项和细节 基本介绍 (1) 适配器模式(Adapter Pattern) 将某个类的接口转换成客户端期望的…

从JDK源码级别彻底剖析JVM类加载机制

loadClass的类加载过程 加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载 ● 加载&#xff1a;在硬盘上查找并通过IO读入字节码文件&#xff0c;使用到类时才会加载&#xff0c;例如调用类的main()方法&#xff0c;new对象等等&am…

如何选择最适合你的数据库解决方案:PostgreSQL VS MySQL 技术选型对比

文章目录 PostgreSQL与MySQL技术选型对比什么是 WordPress 数据库&#xff1f;什么是 PostgreSQL&#xff1f;历史主要特点高度可靠灵活性可扩展性复制用例什么是 MySQL&#xff1f;历史主要特点使用方便高灵活性可靠性和安全性高性能可扩展开源许可证用例PostgreSQL 与 MySQL&…

状态模式——随遇而安

● 状态模式介绍 状态模式中的行为是由状态来决定的&#xff0c;不用的状态下有不同的行为。状态模式和策略模式结构几乎完全一样&#xff0c;但它们的目的、本质却完全不一样就。状态模式的行为是平行的、不可替代的&#xff0c;策略模式的行为是彼此孤立、可相互替换的。用一…

【UE】一个简易的游戏计时器

效果 步骤 1. 打开“ThirdPersonGameMode” 创建两个整型变量&#xff0c;分别命名为“Seconds”、“Minutes” 在事件图表中添加如下节点&#xff0c;实现“Seconds”每秒加1 继续添加如下节点&#xff1a; 当秒数大于60时&#xff0c;就让分钟数1&#xff0c;然后将秒数重新…

P1045 [NOIP2003 普及组] 麦森数

题目描述 形如 2&#xfffd;−12P−1 的素数称为麦森数&#xff0c;这时 &#xfffd;P 一定也是个素数。但反过来不一定&#xff0c;即如果 &#xfffd;P 是个素数&#xff0c;2&#xfffd;−12P−1 不一定也是素数。到 1998 年底&#xff0c;人们已找到了 37 个麦森数。最…

AI数字人技术在高中历史课堂上的应用

引言 介绍AI数字人技术的概念和特点介绍AI数字人技术在教育领域的价值和意义提出本文的主题和目的&#xff1a;探讨AI数字人技术在高中历史课堂上的应用 AI数字人技术在高中历史课堂上的应用方式 介绍AI数字人技术可以通过还原历史人物说话视频&#xff0c;利用历史人物籍贯…

HJHD-91晃电保护器 新款35mm卡轨安装 josef约瑟

名称&#xff1a;晃电保护器品牌&#xff1a;JOSEF约瑟型号&#xff1a;HJHD-91额定电压&#xff1a;110、220VAC触点容量&#xff1a;250V/5A动作时间&#xff1a;不大于20ms功率消耗&#xff1a;不大于5W/5VA HJHD系列晃电保护器 HJHD-91晃电保护器 抗晃电继电器 1.特点和用途…

压力测试工具Jmeter入门

文章目录 一、JMeter概述1、JMeter简介2、JMeter的作用 二、JMeter下载三、JMeter测试1.创建线程组2、配置元件3、为线程添加监听器4、查看报告 一、JMeter概述 1、JMeter简介 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测试。 …

Nginx安装删除

1.卸载Nginx ps -ef|grep nginx 查询Nginx 进程pid kill -9 7035 kill -9 7036 查找根下所有名字包含nginx的文件 find / -name nginx 执行命令 rm -rf *删除nignx安装的相关文件 下面开始安装,安装方式很多,可以选择官网下载后拖进linux 官网nginx: download 官网下载…

Mysql-JSON

一、根据JSON字段检索内容 语法: 使用 字段->$.json属性进行查询条件使用json_extract函数查询&#xff0c;json_extract(字段,"$.json属性")根据json数组查询&#xff0c;用JSON_CONTAINS(字段,JSON_OBJECT(json属性, "内容")) 二、检索查询 1.json…