C#学习笔记--窗体容器 FlowLayoutPanel、Panel、TableLayoutPanel的重叠使用

叙述

Winform使用过窗体容器时发现部分窗体的层次和顺序有差别,会导致不一样的顺序,不一样的层次可能反而不能达到预期的展示效果。

1. 窗体容器使用说明

winform的窗体容器有几个种类,不同的容器可以达到不一样的效果,可以根据自己的需求灵活选用。

  • FlowLayoutPanel:窗体流布局,再这个面板中添加控件,控件会根据面板的尺寸变化自动变换位置,顺序固定,尺寸不变,指示位置自动变换;
  • Panel:普通面板,相当于一个小的子窗体,具体乃荣操作需要另外编辑;
  • TableLayoutPanel:表格面板,划分成表格,然后每一个表格填充控件,每一个单元格只能放置一个控件。

2. 重叠使用

不同容器组合重叠使用。

Panel:可以多个面板重叠放置使用,可以用于做同一个窗体的页面切换的效果,而且不想TabControl一样显示选项卡。
TableLayoutPanle:由于面板的每个单元格只能放置一个控件,该面板无法做重叠面板切换显示做不同页面。
实际使用过程中可以将TableLayoutPanel放置到Panel中,然后就通过添加多个Panel来实现页面切换。
Panle的隐藏和显示通过面板的Hide和Show方法来设置。

FlowLayoutPanel 一些应用程序需要一个布局可随窗体大小的调整或其中内容大小的改变而自动进行适当排列的窗体。在需要动态布局并且不希望在代码中显式处理 Layout 事件时,可考虑使用布局面板。 FlowLayoutPanel是.NET Framework的新增控件。顾名思义,面板可以采用Web窗体的方式给Windows窗体布局。FlowLayoutPanel是一个容器,允许以垂直或水平的方式放置包含的控件。除了放置控件之外,还可以剪辑控件。放置的方向使用FlowDirection属性和FlowDirection枚举来设置。WrapContents属性确定在重新设置窗体的大小时,控件是放在下一行、下一列,还是剪辑控件。 FlowLayoutPanel 按特定的流方向排列其内容:水平或垂直。其内容可从一行换到下一行,或者从一列换到下一列。另一种情况是不换行,而是将其内容截掉。 相信大家在做WinForm项目的时候,要对大量的控件进行排序(位置摆放),这个容器肯定最受欢迎,但很遗憾的是,此容器本身虽支持Dock和Anchor属性,但不支持放入此容器内的控件的Dock和Anchor属性(自动调整宽度),也就说,但窗体伸缩,FlowLayoutPanel容器自身可以缩放,但是里面的控件就没那么幸运了,不支持自动缩放,这样就必须写方法来触发新的事件来调整控件的大小,这样就会导致窗体的闪烁(重绘)。 借助ManagedSpy工具,我们可以看到此容器里面的器件的结构,我们可以在Form1里面添加一个事件SizeChanged 对容器里面每个器件重新给它大小 就行了。 附件:FlowLayoutPanel的Demo
TableLayoutPanelFlowLayoutPanel都是WinForm中常用的布局控件,它们可以帮助我们方便地进行控件布局,下面分别介绍一下它们的使用方法: 1. TableLayoutPanel TableLayoutPanel是一个将控件以表格的形式进行布局的控件,可以通过设置行和列的数量以及每个单元格的大小来实现不同的布局效果。 使用方法: (1)在Visual Studio的工具箱中找到TableLayoutPanel控件并将其拖拽到窗体上。 (2)在属性窗口中设置控件的行数、列数、单元格大小等属性。 (3)将需要布局的控件拖放到TableLayoutPanel中的对应单元格中。 示例代码: ``` // 创建TableLayoutPanel控件 TableLayoutPanel tableLayoutPanel1 = new TableLayoutPanel(); tableLayoutPanel1.ColumnCount = 2; tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); tableLayoutPanel1.RowCount = 2; tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel1.Dock = DockStyle.Fill; // 将需要布局的控件添加到TableLayoutPanel中 Label label1 = new Label(); label1.Text = "Label1"; tableLayoutPanel1.Controls.Add(label1, 0, 0); Label label2 = new Label(); label2.Text = "Label2"; tableLayoutPanel1.Controls.Add(label2, 1, 0); Button button1 = new Button(); button1.Text = "Button1"; tableLayoutPanel1.Controls.Add(button1, 0, 1); Button button2 = new Button(); button2.Text = "Button2"; tableLayoutPanel1.Controls.Add(button2, 1, 1); // 将TableLayoutPanel添加到窗体中 this.Controls.Add(tableLayoutPanel1); ``` 2. FlowLayoutPanel FlowLayoutPanel是一个可以根据窗体大小自动调整控件位置的控件,可以实现类似于网页中的流布局效果,可以方便地进行控件排列。 使用方法: (1)在Visual Studio的工具箱中找到FlowLayoutPanel控件并将其拖拽到窗体上。 (2)在属性窗口中设置控件的FlowDirection、WrapContents等属性。 (3)将需要布局的控件拖放到FlowLayoutPanel中。 示例代码: ``` // 创建FlowLayoutPanel控件 FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel(); flowLayoutPanel1.FlowDirection = FlowDirection.LeftToRight; flowLayoutPanel1.WrapContents = true; flowLayoutPanel1.Dock = DockStyle.Fill; // 将需要布局的控件添加到FlowLayoutPanel中 Label label1 = new Label(); label1.Text = "Label1"; flowLayoutPanel1.Controls.Add(label1); Label label2 = new Label(); label2.Text = "Label2"; flowLayoutPanel1.Controls.Add(label2); Button button1 = new Button(); button1.Text = "Button1"; flowLayoutPanel1.Controls.Add(button1); Button button2 = new Button(); button2.Text = "Button2"; flowLayoutPanel1.Controls.Add(button2); // 将FlowLayoutPanel添加到窗体中 this.Controls.Add(flowLayoutPanel1); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼听禅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值