【WinForm.NET开发】使用 TableLayoutPanel 在 Windows 窗体上排列控件

news2024/9/24 13:25:50

本文内容

  1. 创建项目
  2. 在行和列中排列控件
  3. 使用停靠和定位在单元格内放置控件
  4. 设置行和列属性
  5. 使用控件跨越行和列
  6. 通过在工具箱中双击控件将其插入
  7. 自动处理溢出
  8. 通过绘制控件轮廓将其插入
  9. 单元格内不允许有多个控件
  10. 交换控件
  11. 后续步骤

某些应用程序需要这样一个窗体,该窗体的布局可在窗体重新调整大小或在内容更改大小时对自身进行排列。 当你需要动态布局并且不希望在代码中显式处理 Layout 事件时,请考虑使用布局面板。

FlowLayoutPanel 控件和 TableLayoutPanel 控件提供可用于排列窗体上的控件的直观方式。 两种控件均提供一种自动的可配置能力来控制包含在控件内的子控件的相对位置,并且两种控件均在运行时提供动态布局功能,以便它们可以在父窗体的尺寸更改时重新调整子控件的大小和对其进行重新定位。 布局面板可以嵌套在布局面板内,从而实现复杂的用户界面。

FlowLayoutPanel 以特定的流向排列其内容:水平或垂直。 可从一行到下一行,或从一列到下列进行内容换行。 还可以剪切内容,而不是进行换行。 

TableLayoutPanel 在网格中排列内容,提供类似于 HTML <table> 元素的功能。 TableLayoutPanel 控件允许你将控件放在网格布局中,而无需精确指定每个控件的位置。 其单元格排列为行和列,并且这些行和列可具有不同的大小。 可以跨行和列合并单元格。 单元格可以包含窗体所能包含的任何内容,并且在大多数其他方面都可以作为容器使用。

TableLayoutPanel 控件还在运行时提供按比例调整大小的功能,因此你的布局可以在窗体调整大小时平滑地进行更改。 这使得 TableLayoutPanel 控件非常适合数据输入窗体和本地化应用程序等用途。 

通常,不应将 TableLayoutPanel 控件用作整个布局的容器。 可使用 TableLayoutPanel 控件为部分布局提供按比例调整大小的功能。

本文涉及以下任务:

  • 创建 Windows 窗体项目

  • 在行和列中排列控件

  • 设置行和列属性

  • 使用控件跨越行和列

  • 自动处理溢出

  • 通过在工具箱中双击控件将其插入

  • 通过绘制控件轮廓将其插入

  • 将现有控件重新分配给另一个父控件

完成上述操作后,你将会了解这些重要布局功能所发挥的作用。

1、创建项目

第一步是创建项目并设置窗体。

创建项目

  1. 创建一个名为“TableLayoutPanelExample”的 Windows 应用程序项目。

  2. 在“Windows 窗体设计器”中选择窗体。

2、在行和列中排列控件

借助 TableLayoutPanel 控件,可以轻松地将控件排列成行和列。

使用 TableLayoutPanel 在行和列中排列控件

  1. 从 TableLayoutPanel “工具箱”  控件拖到你的窗体上。 请注意,默认情况下,TableLayoutPanel 控件有四个单元格。

  2. 将 Button 控件从工具箱拖到 TableLayoutPanel 控件中,然后将其放入其中一个单元格。 请注意,Button 控件将在所选单元格中创建。

  3. 将另外三个 Button 控件从工具箱拖到 TableLayoutPanel 控件中,以便每个单元格都包含一个按钮。

  4. 抓取两列之间的垂直调整大小图柄并将其移至左侧。 请注意,第一列中 Button 控件的大小被调整为更小的宽度,而第二列中 Button 控件的大小保持不变。

  5. 抓取两列之间的垂直调整大小图柄并将其移至右侧。 请注意,第一列中的 Button 控件恢复为原始大小,而第二列中的 Button 控件向右移动。

  6. 上下移动水平调整大小图柄,以查看面板中控件的效果。

3、使用停靠和定位在单元格内放置控件

TableLayoutPanel 中子控件的定位行为不同于其他容器控件中的行为。 子控件的停靠行为与其他容器控件相同。

在单元格内放置控件

  1. 选择第一个 Button 控件。 将其 Dock 属性的值更改为 Fill。 请注意,Button 控件将展开以填充单元格。

  2. 选择其他 Button 控件之一。 将其 Anchor 属性的值更改为 Right。 请注意,此操作会将它移动,使其右边框靠近单元格的右边框。 边框之间的距离是 Button 控件的 Margin 属性和面板的 Padding 属性之和。

  3. 将 Button 控件的 Anchor 属性值更改为 Right 和 Left。 请注意,该控件会根据单元格的宽度调整大小,调整时会考虑 Margin 和 Padding 值。

  4. 使用 Top 和 Bottom 样式重复步骤 2 和 3。

4、设置行和列属性

可以使用 RowStyles 和 ColumnStyles 集合设置行和列的各个属性。

设置行和列属性

  1. 在“Windows 窗体设计器”中选择 TableLayoutPanel 控件。

  2. 在“属性”窗口中,单击条目旁边的省略号 (

    visual-studio-ellipsis-button.png?view=netframeworkdesktop-4.8

    ) 按钮打开 ColumnStyles 集合。

  3. 选择第一列并将其 SizeType 属性的值更改为 AutoSize。 单击“确定”接受这些更改。 请注意,第一列的宽度会缩小,以适应 Button 控件。 另请注意,列的宽度不可调整大小。

  4. 在“属性”窗口中,打开 ColumnStyles 集合并选择第一列。 将其 SizeType 属性的值更改为 Percent。 单击“确定”接受这些更改。 将 TableLayoutPanel 控件调整为更大的宽度,并注意第一列的宽度会扩大。 将 TableLayoutPanel 控件调整为更小的宽度,并注意第一列中的按钮会根据单元格调整大小。 另请注意,列的宽度可调整大小。

  5. 在“属性”窗口中,打开 ColumnStyles 集合并选择所有列出的列。 将每个 SizeType 属性的值设置为 Percent。 单击“确定”接受这些更改。 对 RowStyles 集合重复这些步骤。

  6. 抓取一个角调整大小图柄并调整 TableLayoutPanel 控件的宽度和高度。 请注意,行和列的大小会随着 TableLayoutPanel 控件大小的变化而调整。 另请注意,行和列的大小可通过水平和垂直调整大小图柄进行调整。

5、使用控件跨越行和列

TableLayoutPanel 控件在设计时向控件添加了几个新属性。 其中两个属性是 RowSpan 和 ColumnSpan。 你可以使用这些属性使控件跨越多行或多列。

使用控件跨越行和列

  1. 选择第一行第一列中的 Button 控件。

  2. 在“属性”窗口中,将 ColumnSpan 属性的值更改为 2。 请注意,Button 控件会填充第一列和第二列。 另请注意,已添加额外的行以容纳此更改。

  3. 对 RowSpan 属性重复步骤 2。

6、通过在工具箱中双击控件将其插入

可通过在 TableLayoutPanel “工具箱” 中双击控件来填充控件。

若要通过在工具箱中双击控件将其插入

  1. 从 TableLayoutPanel “工具箱”  控件拖到你的窗体上。

  2. 在“工具箱” Button中,双击控件图标。 请注意,新按钮控件显示在 TableLayoutPanel 控件的第一个单元格中。

  3. 在 “工具箱”中再双击几个控件。 请注意,新控件会相继显示在 TableLayoutPanel 控件未占用的单元格中。 另请注意,如果没有打开的单元格可用,TableLayoutPanel 控件会扩大以容纳新控件。

7、自动处理溢出

将控件插入 TableLayoutPanel 控件时,新控件的空单元格可能会用完。 TableLayoutPanel 控件可通过增加单元格数量自动处理这种情况。

观察溢出的自动处理

  1. 如果 TableLayoutPanel 控件中仍有空单元格,请继续插入新的 Button 控件,直到 TableLayoutPanel 控件被占满。

  2. TableLayoutPanel 控件被占满后,双击工具箱中的 Button 图标以插入另一个 Button 控件。 请注意,TableLayoutPanel 控件会创建新单元格以容纳新控件。 再插入几个控件并观察调整大小行为。

  3. 将 TableLayoutPanel 控件的 GrowStyle 属性值更改为 FixedSize。 双击工具箱中的 Button 图标以插入 Button 控件,直到 TableLayoutPanel 控件被占满。 再次双击工具箱中的 Button 图标。 请注意,你会收到来自 Windows 窗体设计器的错误消息,通知你无法创建其他行和列。

8、通过绘制控件轮廓将其插入

你可以通过在单元格中绘制控件轮廓将控件插入 TableLayoutPanel 控件并指定其大小。

通过绘制控件轮廓插入控件

  1. 从 TableLayoutPanel “工具箱”  控件拖到你的窗体上。

  2. 在“工具箱” 中,单击 Button 控件图标。 请勿将其拖到窗体上。

  3. 将鼠标指针移到 TableLayoutPanel 控件上。 请注意,指针会更改为十字形,同时会附上 Button 控件图标。

  4. 单击并按住鼠标按钮。

  5. 拖动鼠标指针以绘制 Button 控件的轮廓。 当获得所需大小时,释放鼠标。 请注意,Button 控件将在绘制控件轮廓的单元格中创建。

9、单元格内不允许有多个控件

TableLayoutPanel 控件的每个单元格只能包含一个子控件。

证明单元格内不允许有多个控件

  • 将 Button 控件从工具箱拖到 TableLayoutPanel 控件中,然后将其放入其中一个已占用的单元格。 请注意,TableLayoutPanel 控件不允许你将 Button 控件放入已占用的单元格。

10、交换控件

使用 TableLayoutPanel 控件可以交换占用两个不同单元格的控件。

交换控件

  • 将其中一个 Button 控件从已占用的单元格拖放到另一个已占用的单元格。 请注意,这两个控件会从一个单元格移动到另一个单元格。

11、后续步骤

可使用布局面板和控件的组合实现复杂布局。 建议了解的其他内容包括:

  • 尝试将其中一个 Button 控件调整为更大的大小,并注意对布局产生的效果。

  • 将所选的多个控件粘贴到 TableLayoutPanel 控件中,并注意控件的插入方式。

  • 布局面板可以包含其他布局面板。 试验将 TableLayoutPanel 控件放入现有控件。

  • 将 TableLayoutPanel 控件停靠到父窗体。 调整窗体大小,并注意对布局产生的效果。

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

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

相关文章

C语言之⽂件操作

一为啥需要文件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化的保…

docker consul容器自动与注册

微服务&#xff08;容器&#xff09;注册与发现&#xff1a;是一种分布式的管理系统&#xff0c;定位服务的方法。 在传统架构当中&#xff0c;应用程序之间直连到已知服务&#xff0c;设备提供的网络&#xff1a;IP地址&#xff0c;基于tcp/ip&#xff0c;端口&#x…

关于linux 磁盘占用排查问题

1.关于磁盘 查看整体磁盘占用大小 df -h 2. 先排除mysql 数据大小 查询库的大小 SELECT table_schema AS "Database", ROUND(SUM(data_length index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema…

认识产品经理以及Axure简单安装与入门

目录 一.认识产品经理 1.1.项目团队 1.2.概述 1.3.认识产品经理 1.4.产品经理工作范围 1.5.产品经理工作流程 1.6.产品经理的职责 1.7.产品经理的分类 1.8.产品经理能力要求 1.9.产品工具 1.10.产品体验报告 二.Axure简介 三.应用场景 四.安装与汉化 4.1.安装 4…

Vue3-19-组件-定义和基本使用

组件的定义 个人理解 &#xff1a;1、组件&#xff0c;就是我们把某个功能模块进行封装&#xff0c;在使用时直接引入进行使用&#xff0c;极大的提高了代码的可复用性。2、在vue 中&#xff0c;一个 [.vue] 文件&#xff0c;就是一个组件。3、组件之间存在【引入】 与 【被引…

Vue.js 使用基础知识

Vue.js 是一款用于构建用户界面的渐进式框架&#xff0c;它专注于视图层。Vue.js 不同于传统的 JavaScript 框架&#xff0c;它采用了组件化的开发方式&#xff0c;使得开发者可以更加高效和灵活地构建交互式的 Web 应用程序。 目录 什么是 Vue.js安装 Vue.jsVue 实例模板语法插…

数据分析为何要学统计学(7)——什么问题适合使用t检验?

t检验&#xff08;Students t test&#xff09;&#xff0c;用于通过小样本&#xff08;样本容量n < 30&#xff09;对总体均值水平进行无差异推断。 t检验要求样本不能超过两组&#xff0c;且每组样本总体服从正态分布&#xff08;对于三组以上样本的&#xff0c;要用方差…

获取Java类路径

利用System.getProperty(“java.class.path”)可以获取Java类路径&#xff08;Java class path&#xff09;。 package com.thb;import java.io.IOException;public class Test5 {public static void main(String[] args) throws IOException {System.out.println(System.getP…

MySQL数据库 DDL

目录 一、DDL 二、操作数据库 三、操作表 四、数据类型 五、表操作案例 六、修改表 七、删除表 一、DDL Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 。 二、操作数据库 &#xff08;1&am…

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 CAN 是目前应用非常广泛的现场总线之一&#xff0c;主要应用于汽车电子和工业领域&#xff0c;尤其是汽车 领域&#xff0c;汽车上大量的传感器与模块都是通过 C…

OceanMind海睿思案例入选第二届中国数据治理年会“DCMM百项优秀案例”

近日&#xff0c;中国电子信息行业联合会在北京成功举办“第二届中国数据治理年会”。 本届大会以“数据强基、智领未来”为主题&#xff0c;汇聚我国数据治理领域的资深专家、学者、企业大咖同台论道&#xff0c;共话数据未来的发展与创新。 中新赛克海睿思作为DCMM3级乙方代…

Python自动化批量篆刻Polygon动物铭文$ANTS

铭文介绍 Polygon马蹄链动物主题铭文 A N T S 总量 2100 w 张&#xff0c;当前还剩余 76 ANTS 总量2100w张&#xff0c;当前还剩余76%&#xff0c;成本很低0.003MATIC一张&#xff0c;可以打了防身。 BRC20比特币铭文生态有RATS老鼠大军&#xff0c;PRC20马蹄有ANTS蚂蚁大军&a…

浅析:智能化视频安全监管系统的设计与实现步骤

关于智能化视频监管方案&#xff0c;小编已经和大家分享了很多&#xff0c;今天就和大家来探讨一下关于智能化视频安全监管系统的设计与实现步骤。 首先需要分析需求。要与使用者和业务部门合作&#xff0c;明确系统的功能和需求&#xff0c;例如&#xff0c;确定监控区域、安…

vsftp 使用虚拟用户 —— 筑梦之路

很久之前写过一遍安装vsftp的文章&#xff1a; CentOS 7 vsftpd服务器搭建记录——筑梦之路-CSDN博客 安装一条命令就可以搞定&#xff0c;这里不再赘述。 配置vsftpd.conf # /etc/vsftpd/vsftpd.conf文件修改以下配置#不允许匿名用户认证 anonymous_enableNO #NO表示所有用…

天猫数据分析(天猫数据查询平台):11月天猫啤酒市场销售数据分析报告

在酒类市场中&#xff0c;被视作“气氛担当”的啤酒&#xff0c;是派对聚会或者自饮场景中的常客&#xff0c;消费人群广泛&#xff0c;如今&#xff0c;啤酒市场已进入存量时代&#xff0c;市场中啤酒的销售也在稳步增长。 鲸参谋数据显示&#xff0c;今年11月份&#xff0c;天…

【Lidar】基于Python格网法计算点云体积(eg.树木体积)

这两天一直不在状态&#xff0c;不是特别想分享文章&#xff0c;所以也没怎么更新。但是代码放在文件里始终不是它的归宿&#xff0c;只有被不断使用它才能进步&#xff0c;才能诠释它的意义。所以今天抽空给大家分享一下如何基于Python利用格网法计算点云的体积&#xff0c;我…

docker的资源限制及容器应用

一、docker资源限制 在使用 docker 运行容器时&#xff0c;一台主机上可能会运行几百个容器&#xff0c;这些容器虽然互相隔离&#xff0c;但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制&#xff0c;那么容器之间会互相影响&#xff0c;小的来说…

解决多卡机器CUDA Error Code 802(CUDA_ERROR_SYSTEM_NOT_READY)

解决多卡机器安装完CUDA后&#xff0c;出现802错误码&#xff1a;Fabric Manager需要和Driver具有完全一致的版本号。 现象 检查 查看service状态&#xff1a; 显示failed&#xff0c;查看nvidia-smi中的Driver版本&#xff1a; 切换版本 sudo yum list installed | grep…

BERT大模型:英语NLP的里程碑

BERT的诞生与重要性 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;大模型标志着自然语言处理&#xff08;NLP&#xff09;领域的一个重要转折点。作为首个利用掩蔽语言模型&#xff08;MLM&#xff09;在英语语言上进行预训练的模型&…

初学python的体会心得20字,初学python的体会心得2000

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;学了python的心得体会200字&#xff0c;初学python的体会心得20字&#xff0c;现在让我们一起来看看吧&#xff01; 本学期&#xff0c;我们学习了杨老师的《python语言程序设计》这门课程&#xff0c;其实早在大一期间…