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; }