演练:使用 FlowLayoutPanel 排列 Windows 窗体上的控件

某些应用程序需要一种窗体,该窗体能够在调整大小或内容变化时自动调整布局。 如果需要动态布局,并且不想在代码中显式处理 Layout 事件,请考虑使用布局面板。

控件 FlowLayoutPanelTableLayoutPanel 控件提供了直观的方式来排列窗体上的控件。 这两者都提供自动、可配置的功能来控制子控件中包含的子控件的相对位置,同时在运行时提供动态布局功能,以便在父窗体的尺寸发生更改时调整和重新定位子控件的大小。 布局面板可以嵌套在布局面板中,以实现复杂的用户界面。

TableLayoutPanel 网格中排列其内容,提供类似于 HTML <表> 元素的功能。 其单元格按行和列排列,这些单元格的大小可能不同。 有关详细信息,请参阅 操作指南:使用 TableLayoutPanel 在 Windows 窗体上排列控件

FlowLayoutPanel 特定流方向排列其内容:水平或垂直。 它的内容可以从一行换到下一行,或从一列换到下一列。 或者,可以剪切其内容,而不是包装。 本演练涉及以下任务:

  • 创建 Windows 窗体项目

  • 水平和垂直排列控件

  • 更改流方向

  • 插入流中断

  • 使用填充和边距排列控件

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

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

  • 使用插入点插入控件

  • 将现有控件重新分配给其他父控件

完成后,你将了解这些重要布局功能所扮演的角色。

创建项目

  1. 在 Visual Studio 中,创建一个名为“FlowLayoutPanelExample”(文件>新建>项目>Visual C#Visual Basic>经典桌面>Windows 窗体应用程序)的应用程序项目。

  2. 窗体设计器中选择窗体。

水平和垂直排列控件

FlowLayoutPanel 控件允许你沿行或列放置控件,而无需精确指定每个控件的位置。

当父窗体的尺寸发生更改时,控件 FlowLayoutPanel 可以调整或重排其子控件的大小。

使用 FlowLayoutPanel 以水平和垂直方式排列控件

  1. FlowLayoutPanel 控件从“工具箱”拖到窗体上

  2. Button控件从工具箱拖动到FlowLayoutPanel。 请注意,它会自动移动到控件的 FlowLayoutPanel 左上角。

  3. 将另一个Button控件从工具箱拖动到FlowLayoutPanel。 请注意,控件 Button 会自动移动到第一个 Button 控件旁边的位置。 FlowLayoutPanel如果太窄而无法容纳同一行上的两个控件,则新Button控件将自动移动到下一行。

  4. 将额外的 Button 控件从 Toolbox 拖动到 FlowLayoutPanel 中。 继续放置 Button 控件,直到其中一个控件换行到下一行。

  5. FlowLayoutPanel 控件 WrapContents 属性的值更改为 false。 请注意,子控件不再流向下一行。 相反,它们会被移动到第一行并进行剪裁。

  6. FlowLayoutPanel 控件 WrapContents 属性的值更改为 true。 请注意,子控件再次换行到下一行。

  7. 减少控件的 FlowLayoutPanel 宽度,直到所有 Button 控件都移动到第一列。

  8. 增加控件的 FlowLayoutPanel 宽度,直到所有 Button 控件都移动到第一行。 可能需要调整窗体的大小以适应更大的宽度。

更改流方向

使用该 FlowDirection 属性可以更改控件的排列方向。 你可以从左到右、从右到左、从上到下或从下到上排列子控件。

更改 FlowLayoutPanel 中的流方向

  1. FlowLayoutPanel 控件 FlowDirection 属性的值更改为 TopDown。 请注意,子控件将重新排列为一个或多个列,具体取决于控件的高度。

  2. 调整FlowLayoutPanel的大小,使其高度比Button控件列短。 请注意,FlowLayoutPanel 会重新排列子控件,使其流入下一列。 继续降低高度,并注意子控件流入连续列。 将 FlowLayoutPanel 控件 FlowDirection 属性的值更改为 RightToLeft。 请注意,子控件的位置是反向的。 修改 FlowDirection 属性的值为 BottomUp 时,请观察布局。

插入流中断

FlowLayoutPanel 控件为其子控件提供 FlowBreak 属性。 将 FlowBreak 属性的值设置为 true 会导致 FlowLayoutPanel 控件停止在当前流方向中布局控件,并换行到下一行或列。

插入流中断

  1. FlowLayoutPanel 控件 FlowDirection 属性的值更改为 TopDown

  2. 选择最左侧列中间的 Button 控件之一。

  3. 将控件的 FlowBreak 属性的值 Button 设置为 true。 请注意,由于该列已损坏,所选 Button 控件后面的控件会流向下一列。 将控件的 FlowBreak 属性的值 Button 设置为 false 返回到原始行为。

使用停靠和锚定来定位控件

子控件的停靠和定位行为与其他容器控件中的行为不同。 停靠和定位都与流方向的最大控制相对。

使用停靠和锚定来设置控件位置

  1. 增大 FlowLayoutPanel 的尺寸,直到 Button 控件全部排列成一列。

  2. 选择顶部 Button 控件。 增加其宽度,使其宽度大约是其他 Button 控件的两倍。

  3. 选择第二个 Button 控件。 将属性 Anchor 的值更改为 Right。 请注意,它已移动,以便其右边框与第一个 Button 控件的右边框对齐。

  4. 将属性 Anchor 的值更改为 RightLeft。 请注意,它的大小与第一个 Button 控件的大小相同。

  5. 选择第三 Button 个控件。 将属性 Dock 的值更改为 Fill。 请注意,它的大小与第一个 Button 控件的大小相同。

使用填充和边距排列控件

您还可以通过更改PaddingMargin属性来安排在FlowLayoutPanel控件中的控件。

您可以使用该 Padding 属性来控制控件在 FlowLayoutPanel 控件的单元格中的位置。 它指定子控件与 FlowLayoutPanel 控件边框之间的间距。

使用该 Margin 属性可以控制控件之间的间距。

使用填充和边距属性排列控件

  1. FlowLayoutPanel 控件 Dock 属性的值更改为 Fill。 如果窗体足够大,Button 控件将被移到 FlowLayoutPanel 控件的第一列中。

  2. 通过展开Padding“属性”窗口中的条目并将属性设置为 All20,更改控件Padding属性的值FlowLayoutPanel。 有关详细信息,请参阅 演练:使用填充、边距和 AutoSize 属性布局 Windows 窗体控件。 请注意,子控件将移动到 FlowLayoutPanel 控件的中心。 属性的值 Padding 增加会将子控件从 FlowLayoutPanel 控件的边框中推开。

  3. 选择该属性FlowLayoutPanel中的所有Button控件,并将属性的值Margin设置为 20。 请注意,控件之间的 Button 间距会增加,因此它们会进一步分开。 可能需要将 FlowLayoutPanel 控件大小调整得更大,以便看到所有子控件。

通过在工具箱中双击控件来插入控件

您可以通过双击工具箱中的控件来填充您的FlowLayoutPanel控件。

通过在工具箱中双击来插入控件

  1. 双击Button工具箱中的控件图标。 请注意,新 Button 控件出现在 FlowLayoutPanel 控件中。

  2. 双击 工具箱中的多个控件。 请注意,新控件依次显示在 FlowLayoutPanel 控件中。

通过绘制轮廓来插入控件

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

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

  1. 工具箱中,单击 Button 控件图标。 不要将其拖到窗体上。

  2. 将鼠标指针移到 FlowLayoutPanel 控件上。 请注意,指针将更改为附加了控件图标的 Button 十字线。

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

  4. 拖动鼠标指针以绘制控件的 Button 轮廓。 如果对大小感到满意,请释放鼠标按钮。 请注意,控件 Button 是在控件 FlowLayoutPanel 的下一个打开位置创建的。

使用插入栏插入控件

可以在 FlowLayoutPanel 控件中的特定位置插入控件。 将控件拖到 FlowLayoutPanel 控件的工作区时,将显示插入栏以指示控件将插入的位置。

使用插入点插入控件

  1. Button 控件从 工具箱 拖动到控件中 FlowLayoutPanel ,并指向两个 Button 控件之间的空间。 请注意,绘制的插入条指示了Button放置到FlowLayoutPanel控件中的位置。 将新 Button 控件拖放到 FlowLayoutPanel 控件之前,将鼠标指针四处移动,观察插入栏的移动方式。

  2. 将新的 Button 控件拖放到 FlowLayoutPanel 控件中。 请注意,新 Button 控件与其他控件不一致,因为它 Margin 的属性具有不同的值。

将现有控件重新分配给其他父控件

可以将您窗体中已存在的控件分配给新的FlowLayoutPanel控件。

重新设置现有控件的父级关系

  1. 将三个 Button 控件从 工具箱 拖到窗体上。 将它们放在彼此附近,但将它们保持不对齐。

  2. 工具箱中,单击 FlowLayoutPanel 控件图标。 不要将其拖到窗体上。

  3. 将鼠标指针靠近三 Button 个控件。 请注意,指针将更改为附加了控件图标的 FlowLayoutPanel 十字线。

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

  5. 拖动鼠标指针以绘制控件的 FlowLayoutPanel 轮廓。 围绕三 Button 个控件绘制轮廓。

  6. 释放鼠标按钮。 请注意,这三个控件 Button 插入到 FlowLayoutPanel 控件中。

后续步骤

可以使用布局面板和控件的组合实现复杂的布局。 有关更多探索的建议包括:

  • 将其中一个 Button 控件的大小调整为更大的大小,并注意对布局的影响。

  • 布局面板可以包含其他布局面板。 尝试将 TableLayoutPanel 控件拖放到现有控件中。

  • FlowLayoutPanel 控件停靠到父窗体。 调整窗体的大小,并记下对布局的影响。

  • 设置其中一个控件的 Visible 属性为 false,并注意观察 FlowLayoutPanel 的响应重排。

另请参阅