指南:使用 TableLayoutPanel 在 Windows 窗体中排列控件

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

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

FlowLayoutPanel 特定流方向排列其内容:水平或垂直。 它的内容可以从一行换到下一行,或从一列换到下一列。 或者,可以剪切其内容,而不是包装。 有关详细信息,请参阅 演练:使用 FlowLayoutPanel 在 Windows 窗体上排列控件

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

TableLayoutPanel控件还在运行时提供按比例调整大小的功能,因此当窗体大小调整时,布局可以平滑更改。 这使得控件 TableLayoutPanel 非常适合用于数据输入表单和本地化应用程序等目的。 有关详细信息,请参阅 演练:为数据输入创建可调整大小的 Windows 窗体演练:创建可本地化的 Windows 窗体

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

本演练涉及以下任务:

  • 创建 Windows 窗体项目

  • 将控件排列成行和列

  • 设置行和列属性

  • 使用控件跨越行和列

  • 自动处理溢出

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

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

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

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

创建项目

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

要创建项目

  1. 创建名为“TableLayoutPanelExample”的 Windows 应用程序项目。 有关详细信息,请参阅 “如何:创建 Windows 窗体应用程序项目 ”。

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

在行和列中排列控件

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

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

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

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

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

  4. 拖动两列之间的垂直大小调整控点,并将其向左移动。 请注意,第一列中的 Button 控件的大小调整为较小的宽度,而第二列中控件的大小 Button 保持不变。

  5. 在两列之间抓取垂直调整控点,将其向右移动。 请注意,第一列中的 Button 控件返回其原始大小,而第二列中的 Button 控件则向右移动。

  6. 上下移动水平调整手柄以查看对面板中控件的影响。

在单元格中利用停靠和锚定控制定位控件

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

在单元格中定位控件

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

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

  3. 将控件Anchor的属性的值Button更改为RightLeft。 请注意,控件的大小为单元格的宽度,并考虑了 MarginPadding 的值。

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

设置行和列属性

可以通过使用RowStylesColumnStyles集合来设置行和列的各个属性。

设置行和列属性

  1. Windows 窗体设计器中选择控件TableLayoutPanel

  2. “属性”窗口中,单击“列”条目旁的省略号按钮(The Ellipsis button (...) in the Properties window of Visual Studio.Visual Studio 属性窗口中的省略号按钮(...)),以打开ColumnStyles集合。

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

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

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

  6. 选择其中一个角落的调整控点,然后调整控件的宽度和高度 TableLayoutPanel 。 请注意,当控件的大小发生更改时 TableLayoutPanel ,行和列会调整大小。 另请注意,可以通过水平和垂直调整控件来调整行和列的大小。

使用控件跨越行和列

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

使用控件跨越行和列

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

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

  3. RowSpan 属性重复步骤 2。

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

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

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

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

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

  3. 双击 工具箱中的多个控件。 请注意,新控件连续出现在TableLayoutPanel控件的未分配单元格中。 另外请注意,如果没有可用的空单元格,TableLayoutPanel 控件将展开以容纳新的控件。

自动处理溢出

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

观察自动处理溢出情况

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

  2. 控件TableLayoutPanel满后,双击工具箱中的Button图标以插入另一个Button控件。 请注意,该 TableLayoutPanel 控件创建新单元格以容纳新控件。 插入更多控件,并观察尺寸调整的情况。

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

通过绘制轮廓来插入控件

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

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

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

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

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

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

  5. 拖动鼠标指针以绘制控件的 Button 轮廓。 如果对大小感到满意,请释放鼠标按钮。 请注意,控件 Button 是在绘制控件轮廓的单元格中创建的。

单元格中不允许包含多个控件

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

为了展示不允许在单元格中使用多个控件

交换控件

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

切换控件

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

后续步骤

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

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

  • 将多个控件的选择粘贴到控件中 TableLayoutPanel ,并记下控件的插入方式。

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

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

另请参阅