我有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
答案 0 :(得分:32)
问题涉及TableLayoutPanel scrolling 您必须使用Panel进行滚动而不是TableLayoutPanel 以下是解决此问题的示例(对于垂直滚动):
答案 1 :(得分:2)
删除动态控件时,需要删除在添加期间插入的额外行,并将表格布局面板高度重新调整为小于滚动容器高度。
在添加过程中,表格布局面板的高度会增加,由滚动容器处理;但是当您删除控件时,表格布局面板高度不会降低它的高度以适应滚动容器。
一种方法是为行提供固定高度,并将表格布局面板设置为“自动”。
答案 2 :(得分:0)
我将tableLayoutPanel插入XtraScrollableControl(Devexpress控件)。 tableLayoutPanel.Dock设置为Top,XtraScrollableControl.Dock设置为Fill。这个解决方案并没有解决这个问题,但我得到了我需要的行为。
答案 3 :(得分:0)
我计算了TableLayoutPanel中的行数,看看有多少行适合。在适合的数量之下,我为添加和删除方法设置了AutoScroll = false。滚动将显示为大集,并在小集上消失。
if (tableLayoutPanel.RowCount < 15)
{
panel1.AutoScroll = false;
}
else
{
panel1.AutoScroll = true;
}
答案 4 :(得分:0)
最简单,最有趣的解决方案之一就是禁用并启用 tableLayoutPanel1.AutoScroll
在“删除过程”代码的末尾添加以下代码:
tableLayoutPanel1.AutoScroll = False
tableLayoutPanel1.AutoScroll = True