Winforms 行折叠/隐藏时调整TableLayoutPanels的大小

Winforms 行折叠/隐藏时调整TableLayoutPanels的大小,winforms,Winforms,我有一个表单,它有一个TableLayoutPanel,有6行,如下所示: 每个label MouseClick事件都会切换其下方面板(位于单独的行中)的visible属性 这使得它看起来像这样: 如您所见,只有最后一行向上展开以填充现在可用的空间 如果折叠底部或中间行,则上面的行不会向下展开: 我如何才能做到以下几点: 可见行将相等地展开以填充可用空间 行将向下移动/展开 我已经尝试了行绝对/百分比/自动调整大小属性的各种组合。。。但是猜测这可能需要扩展TableLayoutPane

我有一个表单,它有一个TableLayoutPanel,有6行,如下所示:

每个label MouseClick事件都会切换其下方面板(位于单独的行中)的visible属性

这使得它看起来像这样:

如您所见,只有最后一行向上展开以填充现在可用的空间

如果折叠底部或中间行,则上面的行不会向下展开:

我如何才能做到以下几点:

  • 可见行将相等地展开以填充可用空间
  • 行将向下移动/展开

我已经尝试了行绝对/百分比/自动调整大小属性的各种组合。。。但是猜测这可能需要扩展TableLayoutPanel类?

我想我有一个可行的例子

在模板上放置一块嵌板,并将其全方位固定

将tablelayoutpanel放在面板中,设置任意大小并将其锚定到各个方向

将标签放入第0、2、4行。 将标签自动调整设置为true

将面板放在第1、3、5行。 在各个方向固定面板。没有停靠或自动调整大小

将带有标签的tablelayoutpanel行设置为绝对和任意高度。我用了20像素

将面板行设置为33.33%。如果您低于或高于此值,表格会自动将其缩放到100%

标签单击事件:

 Public Class Form1

    Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click


        If TableLayoutPanel1.RowStyles(1).Height > 10 Then
            TableLayoutPanel1.RowStyles(1).SizeType = SizeType.Absolute
            TableLayoutPanel1.RowStyles(1).Height = 2
        Else
            TableLayoutPanel1.RowStyles(1).SizeType = SizeType.Percent
            TableLayoutPanel1.RowStyles(1).Height = 33.33
        End If

    End Sub

    Private Sub Label2_Click(sender As System.Object, e As System.EventArgs) Handles Label2.Click

        If TableLayoutPanel1.RowStyles(3).Height > 10 Then
            TableLayoutPanel1.RowStyles(3).SizeType = SizeType.Absolute
            TableLayoutPanel1.RowStyles(3).Height = 2
        Else
            TableLayoutPanel1.RowStyles(3).SizeType = SizeType.Percent
            TableLayoutPanel1.RowStyles(3).Height = 33.33
        End If
    End Sub

    Private Sub Label3_Click(sender As System.Object, e As System.EventArgs) Handles Label3.Click

        If TableLayoutPanel1.RowStyles(5).Height > 10 Then
            TableLayoutPanel1.RowStyles(5).SizeType = SizeType.Absolute
            TableLayoutPanel1.RowStyles(5).Height = 2
        Else
            TableLayoutPanel1.RowStyles(5).SizeType = SizeType.Percent
            TableLayoutPanel1.RowStyles(5).Height = 33.33
        End If
    End Sub
End Class
我不知道你是否需要把它放在一个面板上才能让它工作。你可以把它固定在表单上,这样就可以了


您还可以在一个事件处理程序中完成此操作,方法是单击标签行并添加1。

您需要:1)所有标签。AutoSize=False,Dock=Fill(将初始宽度设置为这些面板的最大大小)2)所有TLP行设置为AutoSize。3) TLP列SizeType=Percent=100%4)TLP.AutoSize=True,AutoSizeMode=growtandshrink。这就是全部。注释可能很有用。如果您在代码中设置了列/行样式,请在设置自己的样式之前清除现有的样式。您确定这应该符合我的期望吗?因为我就是这样设置的,我甚至仔细检查并重新编辑了它以确保,但是当我折叠第三个面板时,第一个和第二个面板不会向下扩展以填充现在可用的空间使用这些设置,在30秒内完成:。你是不是碰巧锚定/停靠了TLP?啊-这不是我想要描述的功能。这就是我已经得到的。我想实现的是,如果你折叠面板3,上面的所有东西都会向下扩展,这样面板1和2就会扩展,填满面板3曾经占据的额外空间。令人惊讶的是,这正是我试图让它工作的方式。我想我缺少的是,我需要获得行样式,而不仅仅是隐藏面板。我没有把我的桌面布局面板放在另一个面板上;只要它是锚定的,我认为它是有效的。