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

news2024/11/28 9:43:28

文章目录

    • 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)
        {
            // 创建一个GroupBox
            GroupBox groupBox = new GroupBox();
            groupBox.Text = "用户信息";
            groupBox.Location = new Point(10, 10);
            groupBox.Size = new Size(300, 200);
            this.Controls.Add(groupBox);

            // 在GroupBox中添加Label和TextBox
            Label 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);

            // 创建一个Panel
            Panel panel = new Panel();
            panel.Location = new Point(320, 10);
            panel.Size = new Size(300, 200);
            this.Controls.Add(panel);

            // 在Panel中添加Label和TextBox
            Label 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)
        {
            // 创建一个TabControl
            TabControl tabControl = new TabControl();
            tabControl.Location = new Point(10, 10);
            tabControl.Size = new Size(400, 300);
            this.Controls.Add(tabControl);
            // 创建第一个TabPage
            TabPage 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);
            // 创建第二个TabPage
            TabPage 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表达式
希望有所帮助,同时欢迎关注我,后面将更新更多相关内容!

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

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

相关文章

Git GitHub同步失败

文章目录 错误解决方案第一步第二步第三步第四步第六步第七步 错误 昨天晚上提交代码到GitHub时遇到了这个错误。 remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.字面大体意思就是你原先的密码凭…

预约按摩小程序开发优势;

在快节奏和高压社会中,按摩已成为许多人缓解压力和保持健康的重要方式,各地的按摩店也是随处可见,而为了能够更好地提供服务,很多按摩店都引入了小程序应用。今天我们就主要了解一下按摩店小程序具体有什么用,能够提供…

【iOS免越狱】利用IOS自动化WebDriverAgent实现自动直播间自动输入

1.目标 由于看直播的时候主播叫我发 666,支持他,我肯定支持他呀,就一直发,可是后来发现太浪费时间了,能不能做一个直播间自动发 666 呢?于是就开始下面的操作。 2.操作环境 iPhone一台 WebDriverAgent …

CAD操作技巧学习总结

1&#xff0c;已知一个圆&#xff0c;画该圆切线。 L命令画直线&#xff0c;再tan指令确定第一个点为切点&#xff0c;依次输入&#xff08;长度&#xff09;<&#xff08;角度&#xff09;&#xff0c;如55<-45,负号为顺时针。 2&#xff0c;中心点偏移。 O命令偏移&am…

再学一点mybatis(原理分析)

文章目录 [TOC](文章目录) 一、mybatis是什么&#xff1f;1. Mybatis的特点以及优缺点 二、mybatis架构1.基本架构2.重要组件 三、原理1. SQL解析2. Mapper接口3. 动态代理4. SQL执行4.1 Executor4.2 StatementHandler4.3 ParameterHandler4.4 ResultHandler 文章内容有点长&am…

【蓝桥每日一题]-二分精确(保姆级教程 篇4) #kotori的设备 #银行贷款 #一元三次方程求解

今天讲二分精确题型 目录 题目&#xff1a;kotori的设备 思路&#xff1a; 题目&#xff1a;银行贷款 思路&#xff1a; 题目&#xff1a;一元三次方程求解 思路&#xff1a; 题目&#xff1a;kotori的设备 思路&#xff1a; 求&#xff1a;设备最长使用时间 二分查找&#…

Linux难学?大神告诉你,Linux到底该怎么自学!

文章目录 前言一、明白这些道理&#xff0c;Linux 就不难学二、五步学会 Linux 命令行&#xff0c;用好这本手册三、Linux 学习进阶之路 前言 知乎上有一条热门问答&#xff0c;问题是 “Linux为什么那么难&#xff1f;” 从问题来看&#xff0c;提问者还处在初学阶段。但他显…

Centos7扩容

Centos7扩容 保证虚拟机关机且没有快照的情况下按照下图进行操作&#xff1a; 设置好后开机&#xff0c;查看分区情况&#xff1a; [rootlocalhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 12G 5.4G 69% / …

21款奔驰GLS450升级23P驾驶辅助 智驾出行

驾驶辅助和自动驾驶的区别就是需要人为去接管&#xff0c;虽然车辆会根据道路自己行驶&#xff0c;弯道上也能居中自动修正行驶&#xff0c;长时间不接管方向盘&#xff0c;系统会提示人为接管&#xff0c;这就是奔驰的23P驾驶辅助系统&#xff0c; 很多车友升级23P驾驶辅助系…

Git统计个人提交代码行数

目录 一、git bash打开二、查看个人提交的代码行数统计三、查看项目每个人提交的代码行数统计四、查询所有用户的提交总次数五、统计用户一段时间内的提交代码量 在实际开发中&#xff0c;常常会想查看自己对于某个项目的贡献&#xff0c;管理者会查看项目下各成员的贡献&#…

mysql、clickhouse时间日期加法

mysql 在’2023-10-27 23:59:59’上增加5秒&#xff1a; SELECT DATE_ADD(2023-10-27 23:59:59, INTERVAL 5 second);clickhouse SELECT date_add(SECOND, 3, toDate(2018-01-01 00:00:00));clickhouse时间按秒、分、时、日、月、年作差 按秒&#xff1a; SELECT dateDiff…

【DataGrip使用小技巧】

在日常开发中无论是连接数据库也好&#xff0c;编写代码也好都是通过DataGrip来实现的&#xff0c;在开发过程中有一些小技巧的使用可以使开发变得高效便捷。 【非常实用】要快速查看插入符号处的表或列的文档,请按 ctrl Q(查看快速文档)。 可以显示首几行的数据&#xff0c…

团队表 -多级团队设计

团队表 -多级团队设计 user_team团队表 &#xff0c;如果存在子团队 1.我们可以通过每一个团队字段加一个parentid &#xff08;相当于一对多的关系&#xff09; 2.还可以设置一个字段CodingNum,比如这样: //系统为了管理查询团队自动生成的有序编号 可以使用3位数代表一个…

MobaXterm 连接虚拟机很慢

1. 打开配置文件 ​ vi /etc/ssh/sshd_config2. 修改配置文件 1&#xff09;修改 GSSAPIAuthentication值 为 no GSSAPIAuthentication&#xff1a;默认开启了 GSSAPIAuthentication 认证&#xff08;大多数情况下GSSAPI认证就是Kerberos认证&#xff09; 2&#xff09;取消…

聚观早报 |智界 S7将开启预售;vivo X100系列定档

【聚观365】11月3日消息 智界 S7将开启预售 vivo X100系列定档 苹果发布第四财季财报 Model 3交付范围扩大 三星Galaxy S23 FE上架 智界 S7将开启预售 据多家媒体报道&#xff0c;华为智选车业务首款轿车智界 S7 于 11 月 9 日正式开启预售&#xff0c;华为智能汽车解决方…

Python机器学习算法入门教程

机器学习&#xff08;Machine Learning&#xff0c;简称 ML&#xff09;是人工智能领域的一个分支&#xff0c;也是人工智能的核心&#xff0c;其涉及知识非常广泛&#xff0c;比如概率论、统计学、近似理论、高等数学等多门学科。 机器学习的目的是设计、分析一些让计算机可以…

JS_变量定义

定义变量 关键字var var 的作用域比较大 全局变量可以重复定义 &#xff08;变量名可以重复使用&#xff09;最下面的值算 定义方式 var a12; var b"你好"; let 定义方式 let是局部变量 在大括号里定义外面访问不了 不可以重复定义 const 定义方式 const 的…

使用 Python 进行自然语言处理第 4 部分:文本表示

一、说明 本文是在 2023 年 3 月为 WomenWhoCode 数据科学跟踪活动发表的系列文章中。早期的文章位于&#xff1a;第 1 部分&#xff08;涵盖 NLP 简介&#xff09;、第 2 部分&#xff08;涵盖 NLTK 和 SpaCy 库&#xff09;、第 2 部分&#xff08;涵盖NLTK和SpaCy库&#xf…

32 mysql in 的实现

前言 这里我们主要是来探讨一下 mysql 中 in 的使用, find_in_set 的使用 这两者 在我们实际应用中应该也是 非常常用的了 测试数据表如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(16) DEFAULT NULL,field2 varchar(16) DEFAU…

ElasticSearch集群架构实战及其原理剖析

ES集群架构 为什么要使用ES集群架构 分布式系统的可用性与扩展性&#xff1a; 高可用性 服务可用性&#xff1a;允许有节点停止服务&#xff1b;数据可用性&#xff1a;部分节点丢失&#xff0c;不会丢失数据&#xff1b; 可扩展性 请求量提升/数据的不断增长(将数据分布…