TableLayoutPanel显示垂直滚动

我有TableLayoutPanel用于动态创建AutoScroll = true的控件。 添加新控件时,它工作正常。 但是当我删除并且所有控件都可见时,可以看到垂直滚动。 这里有一些截图:

预期/正确滚动可见性:

在此处输入图像描述

能见度不正确:

在此处输入图像描述

有任何想法吗?

更新:这是一些代码

tableLayoutPanel1.SuspendLayout(); tableLayoutPanel1.RowCount = 0; tableLayoutPanel1.RowStyles.Clear(); tableLayoutPanel1.AutoScroll = true; tableLayoutPanel1.Padding = new Padding(0, 0, SystemInformation.VerticalScrollBarWidth, 0); foreach (var item in objects) { tableLayoutPanel1.RowCount++; tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize)); tableLayoutPanel1.Controls.Add(CreateNewItem(item)); } tableLayoutPanel1.RowCount++; tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize)); tableLayoutPanel1.Controls.Add(CreateAddButton()); tableLayoutPanel1.ResumeLayout(); 

和删除代码

 tableLayoutPanel1.SuspendLayout(); tableLayoutPanel1.Controls.Remove(item); tableLayoutPanel1.RowStyles.RemoveAt(0); tableLayoutPanel1.RowCount--; tableLayoutPanel1.ResumeLayout(); 

AutoSize为true,AutoSizeMode为GrowAndShrink

问题涉及TableLayoutPanel滚动 。
您必须使用Panel进行滚动而不是TableLayoutPanel。
这是一个解决此问题的示例(用于垂直滚动):

  • 设置TableLayoutPanel属性如下:
    • Dock = DockStyle.Top
    • AutoSize = true
    • AutoSizeMode = AutoSizeMode.GrowAndShrink
    • AutoScroll = false。
  • 将TableLayoutPanel放入具有属性的Panel中:
    • Dock = DockStyle.Fill
    • AutoScroll = true
    • AutoSize = false。

删除动态控件时,需要删除在添加过程中插入的额外行,并将表格布局面板高度重新调整为小于滚动容器高度。

在添加过程中,表格布局面板的高度会增加,由滚动容器处理; 但是当您删除控件时,表格布局面板高度不会降低它的高度以适应滚动容器。

一种方法是为行提供固定高度,并将表格布局面板设置为“自动”。

我将tableLayoutPanel插入XtraScrollableControl(Devexpress控件)。 tableLayoutPanel.Dock设置为Top,XtraScrollableControl.Dock设置为Fill。 这个解决方案并没有解决这个问题,但我得到了我需要的行为。

我计算了TableLayoutPanel中的行数,看看有多少行适合。 在适合的数量之下,我为添加和删除方法设置了AutoScroll = false。 滚动将显示为大集,并在小集上消失。

 if (tableLayoutPanel.RowCount < 15) { panel1.AutoScroll = false; } else { panel1.AutoScroll = true; }