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

【WinForm详细教程六】WinForm中的GroupBox和Panel 、TabControl 、SplitContainer控件

文章目录

    • 1.GroupBox和Panel
    • 2.TabControl
    • 3.SplitContainer

1.GroupBox和Panel

GroupBox:是一个分组容器,提供一个框架将相关的控件组织在一起,它有标题、边框,但没有滚动条。

Panel:也是一个容器控件,用来集中显示和管理其他控件。它没有标题,有可选的边框,可以设置滚动条。

共同点:都是容器控件,可以将其他控件放入其中,实现集中管理。拖动容器时,其中的控件会一起移动。在布局时,通常用来进行分组,一般不会在这两个控件上注册事件。

代码示例

namespace WinFormsTest
{public partial class frmGroupBox_Panel : Form{public frmGroupBox_Panel(){InitializeComponent();}private void frmGroupBox_Panel_Load(object sender, EventArgs e){// 创建一个GroupBoxGroupBox groupBox = new GroupBox();groupBox.Text = "用户信息";groupBox.Location = new Point(10, 10);groupBox.Size = new Size(300, 200);this.Controls.Add(groupBox);// 在GroupBox中添加Label和TextBoxLabel nameLabel = new Label();nameLabel.Text = "姓名:";nameLabel.Location = new Point(10, 30);groupBox.Controls.Add(nameLabel);TextBox nameTextBox = new TextBox();nameTextBox.Location = new Point(120, 30);groupBox.Controls.Add(nameTextBox);// 创建一个PanelPanel panel = new Panel();panel.Location = new Point(320, 10);panel.Size = new Size(300, 200);this.Controls.Add(panel);// 在Panel中添加Label和TextBoxLabel emailLabel = new Label();emailLabel.Text = "邮箱:";emailLabel.Location = new Point(10, 30);panel.Controls.Add(emailLabel);TextBox emailTextBox = new TextBox();emailTextBox.Location = new Point(120, 30);panel.Controls.Add(emailTextBox);}}
}

在这里插入图片描述

2.TabControl

TabControl:是一个用于管理TabPages集合的容器控件,可以将多个TabPages分组显示在不同的选项卡中,每个TabPage是一个容器控件,可放置其他控件。

属性:

  • MultiLine:是否允许多行显示选项卡。
  • TabPages:获取TabControl中的选项卡集合。
  • Alignment:获取或设置选项卡的对齐方式。
  • Appearance:获取或设置选项卡的外观样式。
  • ImageList:获取或设置与选项卡关联的图像列表。

事件:

  • SelectedIndexChanged:当切换选项卡时发生。

代码示例:

namespace WinFormsTest
{public partial class frmTabControl : Form{public frmTabControl(){InitializeComponent();}private void frmTabControl_Load(object sender, EventArgs e){// 创建一个TabControlTabControl tabControl = new TabControl();tabControl.Location = new Point(10, 10);tabControl.Size = new Size(400, 300);this.Controls.Add(tabControl);// 创建第一个TabPageTabPage tabPage1 = new TabPage();tabPage1.Text = "页面1";tabControl.TabPages.Add(tabPage1);// 在第一个TabPage中添加控件Label label1 = new Label();label1.Text = "这是第一页";label1.Location = new Point(10, 10);tabPage1.Controls.Add(label1);// 创建第二个TabPageTabPage tabPage2 = new TabPage();tabPage2.Text = "页面2";tabControl.TabPages.Add(tabPage2);// 在第二个TabPage中添加控件Label label2 = new Label();label2.Text = "这是第二页";label2.Location = new Point(10, 10);tabPage2.Controls.Add(label2);// 添加选项卡切换事件tabControl.SelectedIndexChanged += TabControl_SelectedIndexChanged;}private void TabControl_SelectedIndexChanged(object sender, EventArgs e){TabControl tabControl = sender as TabControl;MessageBox.Show("切换到了" + tabControl.SelectedTab.Text);}}
}

动画66

3.SplitContainer

SplitContainer控件是一个用于将页面拆分成两个大小可调整的区域的容器控件,中间有一个拆分条,通过拖动拆分条来调整左右或上下区域的大小。

在这里插入图片描述

属性:

  • FixedPanel:指定在调整控件大小时,某个面板的宽度或高度保持不变。
  • Dock:控件的停靠方式,默认值为Fill。
  • IsSplitterFixed:指定拆分条是否固定,如果为true,则拆分条不能被拖动。
  • Orientation:指定拆分器是水平的还是垂直的,可选值为Horizontal或Vertical。
  • Panel1、Panel2:获取SplitContainer控件的两个面板。
  • SplitterDistance:指定拆分条与左边或上边的距离,单位为像素。
  • SplitterWidth:指定拆分条的宽度或高度,单位为像素。
  • SplitterIncrement:指定拆分条移动时的增量,单位为像素。

代码示例

namespace WinFormsTest
{public partial class frmSplitContainer : Form{public frmSplitContainer(){InitializeComponent();}private void frmSplitContainer_Load(object sender, EventArgs e){// 创建一个SplitContainer控件SplitContainer splitContainer1 = new SplitContainer();splitContainer1.Location = new Point(10, 10);splitContainer1.Size = new Size(400, 300);this.Controls.Add(splitContainer1);// 设置SplitContainer1的属性splitContainer1.FixedPanel = FixedPanel.Panel1;splitContainer1.Dock = DockStyle.Fill;splitContainer1.IsSplitterFixed = false;splitContainer1.Orientation = Orientation.Vertical;splitContainer1.SplitterDistance = 150;splitContainer1.SplitterWidth = 5;splitContainer1.SplitterIncrement = 10;// 在SplitContainer1的Panel1中添加一个SplitContainer控件SplitContainer splitContainer2 = new SplitContainer();splitContainer2.Location = new Point(0, 0);splitContainer2.Size = new Size(150, 300);splitContainer1.Panel1.Controls.Add(splitContainer2); // 将SplitContainer2控件添加到SplitContainer1的Panel1中// 设置SplitContainer2的属性splitContainer2.FixedPanel = FixedPanel.Panel2;splitContainer2.Dock = DockStyle.Fill;splitContainer2.IsSplitterFixed = false;splitContainer2.Orientation = Orientation.Horizontal;splitContainer2.SplitterDistance = 150;splitContainer2.SplitterWidth = 5;splitContainer2.SplitterIncrement = 10;// 在SplitContainer1的Panel2中添加控件Label label1 = new Label();label1.Text = "这是右边的面板";label1.Location = new Point(10, 10);splitContainer1.Panel2.Controls.Add(label1);// 在SplitContainer2的Panel1中添加控件Label label2 = new Label();label2.Text = "这是左上的面板";label2.Location = new Point(10, 10);splitContainer2.Panel1.Controls.Add(label2);// 在SplitContainer2的Panel2中添加控件Label label3 = new Label();label3.Text = "这是左下的面板";label3.Location = new Point(10, 10);splitContainer2.Panel2.Controls.Add(label3);// 添加 SplitterPaint 事件处理器splitContainer1.Paint += (sender, e) =>{// 绘制边界框Rectangle rect = splitContainer1.SplitterRectangle;using (Pen pen = new Pen(Color.Red, 2))  // 创建一个红色的画笔,线宽为2{e.Graphics.DrawRectangle(pen, rect);}};// 添加 SplitterPaint 事件处理器splitContainer2.Paint += (sender, e) =>{// 绘制边界框Rectangle rect = splitContainer2.SplitterRectangle;using (Pen pen = new Pen(Color.Green, 2))  // 创建一个红色的画笔,线宽为2{e.Graphics.DrawRectangle(pen, rect);}};}}
}

动画77

精彩推荐:
【C#进阶一】C#中的数组(Array)、集合(ArrayList,Queue,Stack, HashList)、List<T>、字典(Dictionary<K,T>)和双向链表LinkedList
【C#进阶八】C#中的序列化与反序列化下(二进制序列化、XML序列化及JSON序列化)

【C#进阶】C#语法中一些常用知识点总结
【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox
【WinForm详细教程三】WinForm中的NumericUpDown、PictureBox、RichTextBox及三种Timer控件
【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件

【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式
希望有所帮助,同时欢迎关注我,后面将更新更多相关内容!

相关文章:

【WinForm详细教程六】WinForm中的GroupBox和Panel 、TabControl 、SplitContainer控件

文章目录 1.GroupBox和Panel2.TabControl3.SplitContainer 1.GroupBox和Panel GroupBox:是一个分组容器,提供一个框架将相关的控件组织在一起,它有标题、边框,但没有滚动条。 Panel:也是一个容器控件,用来…...

gradle与maven

Gradle 和 Maven 都是流行的构建工具,通常用于构建和管理 Java 和 Android 项目。它们都可以自动下载依赖库、编译代码、运行测试、打包和发布等。 以下是对 Gradle 和 Maven 的介绍: Gradle: Gradle 是一个基于 Groovy 和 Kotlin 的构建自…...

2.Docker基本架构简介与安装实战

1.认识Docker的基本架构 下面这张图是docker官网上的,介绍了整个Docker的基础架构,我们根据这张图来学习一下docker的涉及到的一些相关概念。 1.1 Docker的架构组成 Docker架构是由Client(客户端)、Docker Host(服务端)、Registry(远程仓库)组成。 …...

拓世法宝 | 数字经济崛起,美业如何抓住流量风口?

爱美之心,人皆有之。无论男女,都会很自然地对美好事物燃起兴致,跟高颜值相关的事物总能聚集注意力。例如直播平台里的美女网红收割流量赚得盆满钵满,面庞俊俏的年轻偶像吸引万千粉丝,还有“央视最美记者”王冰冰、“最…...

Scala 泛型编程

1. 泛型 Scala 支持类型参数化&#xff0c;使得我们能够编写泛型程序。 1.1 泛型类 Java 中使用 <> 符号来包含定义的类型参数&#xff0c;Scala 则使用 []。 class Pair[T, S](val first: T, val second: S) {override def toString: String first ":" sec…...

索引失效的场景有哪些?

虽然你这列上建了索引&#xff0c;查询条件也是索引列&#xff0c;但最终执行计划没有走它的索引。下面是引起这种问题的几个关键点。 列与列对比 某个表中&#xff0c;有两列&#xff08;id和c_id&#xff09;都建了单独索引&#xff0c;下面这种查询条件不会走索引 select…...

Java进阶04 final关键字、abstract抽象、interface接口、JDK8与JDK9中接口的区别、内部类和匿名类

文章目录 一、final关键字二、abstract关键字三、接口interface四、JDK8和JDK9中接口的区别五、内部类 一、final关键字 final可以修饰类、方法、变量 用final修饰类 表示此类不能被继承 用final修饰方法 表示方法不可以被重写 用final修饰变量 既可以修饰成员变量也可以修饰…...

Python的web自动化学习(五)Selenium的隐式等待(元素定位)

引言&#xff1a; WebDriver隐式等待是一种全局性的等待方式&#xff0c;它会在查找元素时设置一个固定的等待时间。当使用隐式等待时&#xff0c;WebDriver会在查找元素时等待一段时间&#xff0c;如果在等待时间内找到了元素&#xff0c;则立即执行下一步操作&#xff1b;如果…...

20231102从头开始配置cv180zb的编译环境(欢迎入坑,肯定还有很多问题等着你)

20231102从头开始配置cv180zb的编译环境&#xff08;欢迎入坑&#xff0c;肯定还有很多问题等着你&#xff09; 2023/11/2 11:31 &#xff08;欢迎入坑&#xff0c;本篇只是针对官方的文档整理的&#xff01;只装这些东西你肯定编译不过的&#xff0c;还有很多问题等着你呢&…...

CentOS 安装HTTP代理服务器 Squid

参考&#xff1a;大部分摘自此文&#xff0c;做了少部分修改 Squid 是一个功能全面的缓存代理服务器&#xff0c;它支持著名的网络协议像 HTTP&#xff0c;HTTPS&#xff0c;FTP 等等。将 Squid 放在网页服务器的前端&#xff0c;通过缓存重复请求&#xff0c;过滤网络流量等&…...

ubuntu下开发提效的小tips

一、常用操作使用简写的别名&#xff0c;写进bashrc文件中 背景&#xff1a;经常需要cd至某个文件夹中&#xff0c;然后再执行对应的操作&#xff1b;写进bashrc文件中后&#xff0c;可以直接用缩略命令替代这一连串的命令&#xff1b; 用到的工具&#xff1a; 设置命令别名a…...

Java反射详解:入门+使用+原理+应用场景

反射非常强大和有用&#xff0c;现在市面上绝大部分框架(spring、mybatis、rocketmq等等)中都有反射的影子&#xff0c;反射机制在框架设计中占有举足轻重的作用。 所以&#xff0c;在你Java进阶的道路上&#xff0c;你需要掌握好反射。 怎么才能学好反射&#xff0c;我们需要…...

PostgreSQL 工具的相关介绍

1.1 psql工具 psql是PostgreSQL中的一个命令行交互式客户端工具&#xff0c;类似 Oracle中的命令行工具sqlplus&#xff0c;它允许用户交互地键入SQL语句或命 令&#xff0c;然后将其发送给PostgreSQL服务器&#xff0c;再显示SQL语句或命令的结 果。 1.2 psql的简单使用 使用…...

结合组件库实现table组件树状数据的增删改

如图所示&#xff0c;可以实现树状数据的新增子项&#xff0c;新增平级&#xff0c;删除。主要用到了递归 代码&#xff1a; <template><el-table :data"tableData" style"width: 100%; margin-bottom: 20px" row-key"id" border def…...

Microsoft 365 管理自动化

Microsoft 365 服务被大多数组织广泛使用&#xff0c;每天生成的数据量巨大。解决 Microsoft 365 中的问题可能非常困难&#xff0c;并且使用多个管理中心来保护组织变得复杂。本机控制台还缺少某些批量管理任务、全面的审计报告和基于角色的精细访问控制。 Microsoft 360 管理…...

unraid 安装并设置 zerotier 内网穿透安装 unraid 局域网内其他设备

Read Original 最近看了以下两个文章&#xff0c;感谢发布的各种精彩文章&#xff0c;让我受益匪浅。OPENWRT 的固件在设置了&#xff0c;【自动允许客户端 NAT】后&#xff0c;可以直接访问局域网其他设备&#xff0c;而我 unraid 部署 zerotier 后&#xff0c;只能访问 unra…...

如何调试 Dubbo 协议调用过程

微服务架构下的快速交付、灵活部署等优势使得 Dubbo 协议已成为了当今互联网基础建设里的一大热点。 Dubbo 协议是一款由阿里巴巴开发并开源的一款高性能 Java RPC 框架&#xff0c;凭借着高效的远程调用、服务注册与发现、灵活的配置等特点&#xff0c;在微服务后端开发场景中…...

C++初阶 类和对象(上)

前言&#xff1a;C初阶系列&#xff0c;每一期博主都会使用简单朴素的语言将对应的知识分享给大家&#xff0c;争取让所有人都可以听懂&#xff0c;C初阶系列会持续更新&#xff0c;上学期间将不定时更新&#xff0c;但总会更的 目录 一、什么是面向对象编程 二、什么是类和如…...

SoftwareTest4 - 咋设计一个好的测试用例

咋设计一个好的测试用例 一 . 设计测试用例的万能公式功能测试性能测试界面测试兼容性测试易用性测试安全测试案例案例1 : 对水杯设计测试用例案例 2 : 对登录页面设计测试用例 二 . 具体设计测试用例的方法2.1 等价类等价类的概念等价类的用例编写 2.2 边界值2.3 判定表2.4 场…...

自定义 Spring Boot Starter 组件

自定义 Spring Boot Starter 组件是为了封装和简化特定功能的配置和集成&#xff0c;让用户能够更容易地集成你提供的库或功能。Spring Boot Starter 组件通常包括自动配置、依赖管理和必要的配置。 下面是创建一个简单的 Spring Boot Starter 的基本步骤&#xff1a; 步骤&a…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...