我使用TableLayouPanel,以编程方式添加每行50px的行。 TLP y-size是217 px,因此添加5行会产生垂直滚动条,但也会产生水平滚动条。
当我添加另一行 - 仍为垂直滚动条时 - 水平滚动条消失。
试图将TLP的大小更改为200到250之间的任何值,保持不变。
如何将此行为删除为任意数量的行,但5可以正常工作?
来自设计师的代码并添加行:
System.Windows.Forms.TableLayoutPanel tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
tableLayoutPanel1.AutoScroll = true;
tableLayoutPanel1.ColumnCount = 3;
tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F));
tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 50F));
tableLayoutPanel1.RowCount = 1;
tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
tableLayoutPanel1.Size = new System.Drawing.Size(709, 217);
tableLayoutPanel1.RowStyles.RemoveAt(0);
for (int i = tableLayoutPanel1.Controls.Count - 1; i >= 0; i--) {
tableLayoutPanel1.Controls[i].Dispose();
}
for(int i = 0; i < 5; i++) {
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 50));
tableLayoutPanel1.Controls.Add(new Control(), 0, i);
tableLayoutPanel1.Controls.Add(new Control(), 1, i);
tableLayoutPanel1.Controls.Add(new Control(), 2, i);
}
if (!tableLayoutPanel1.VerticalScroll.Visible){ //false for 5
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize, 0));
tableLayoutPanel1.Controls.Add(new Control(), 0, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 1, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 2, inp.Count);
}
tl; dr为什么有一个包含5行的水平滚动条以及如何使内容再次适合外部控件,所以没有?
考虑通过添加另一行并再次删除它来解决这个问题,但由于TableLayoutPanel
没有给出一个fck,最后一行会自动占用&#34;剩余的&#34;删除行的空间...至少是我目前的进展情况,不确定是否应将所有内容更改为DataGridView
答案 0 :(得分:0)
我尝试了很多不同的东西,找到了适合我的解决方案:
tableLayoutPanel1.RowStyles.RemoveAt(0); for (int i = tableLayoutPanel1.Controls.Count - 1; i >= 0; i--) { tableLayoutPanel1.Controls[i].Dispose(); }
成了
int i;
while ((i = tableLayoutPanel1.Controls.Count) >= 2) {
tableLayoutPanel1.Controls[--i].Dispose();
tableLayoutPanel1.Controls[--i].Dispose();
tableLayoutPanel1.Controls[--i].Dispose();
}
while (tableLayoutPanel1.RowStyles.Count > 0) {
tableLayoutPanel1.RowStyles.RemoveAt(tableLayoutPanel1.RowStyles.Count - 1);
}
和(可变大小的空行,如果在需要滚动条之前行数少于空格,则保留最后一行的大小)
if (!tableLayoutPanel1.VerticalScroll.Visible){ //false for 5 tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize, 0)); tableLayoutPanel1.Controls.Add(new Control(), 0, inp.Count); tableLayoutPanel1.Controls.Add(new Control(), 1, inp.Count); tableLayoutPanel1.Controls.Add(new Control(), 2, inp.Count); }
成了
tableLayoutPanel1.Update(); //
if (!tableLayoutPanel1.VerticalScroll.Visible) {
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize, 0));
tableLayoutPanel1.Controls.Add(new Control(), 0, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 1, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 2, inp.Count);
} else if (tableLayoutPanel1.HorizontalScroll.Visible) {
if (tableLayoutPanel1.RowStyles.Count != inp.Count) {
tableLayoutPanel1.GetControlFromPosition(0, inp.Count).Dispose();
tableLayoutPanel1.GetControlFromPosition(1, inp.Count).Dispose();
tableLayoutPanel1.GetControlFromPosition(2, inp.Count).Dispose();
tableLayoutPanel1.RowStyles.RemoveAt(inp.Count);
} else {
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize, 0));
tableLayoutPanel1.Controls.Add(new Control(), 0, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 1, inp.Count);
tableLayoutPanel1.Controls.Add(new Control(), 2, inp.Count);
tableLayoutPanel1.GetControlFromPosition(0, inp.Count).Dispose();
tableLayoutPanel1.GetControlFromPosition(1, inp.Count).Dispose();
tableLayoutPanel1.GetControlFromPosition(2, inp.Count).Dispose();
tableLayoutPanel1.RowStyles.RemoveAt(inp.Count);
}
}
对于任何想知道的人:inp.Count
是实际添加的非空行的数量。
有可能重新格式化并缩短它,因为它看起来多余,但我工作的时间足够长,它现在应该没问题。