我在Windows窗体上有一个TableLayoutPanel,当窗体窗口重新调整大小时,如何设置动态列数?例如,如果表单最大化,则为3列;如果将表单重新调整为较小的大小,则为2列?
感谢您提供任何帮助!
答案 0 :(得分:0)
更大:
panel.ColumnCount = 3;
小:
panel.ColumnCount = 2;
答案 1 :(得分:0)
下面是一个示例,您可以使用所需的宽度动态添加列。
在TableLayoutPanel中: 将GrowStyle设置为AddColumns 检查结果 设置Dockstyle以填充和 将CellBorderStyle设置为Single
现在向表单添加resize事件..
public Form1()
{
InitializeComponent();
this.Resize += Form1_Resize;
}
void Form1_Resize(object sender, EventArgs e)
{
int desiredWidthPerColumn = 100;
setColumnsWidth(desiredWidthPerColumn, tableLayoutPanel1);
}
void setColumnsWidth(int width, TableLayoutPanel tPanel)
{
tPanel.ColumnCount = tPanel.Width / width;
for (int i = 0; i < tPanel.ColumnStyles.Count; i++) tPanel.ColumnStyles.RemoveAt(i);
for (int i = 0; i < tPanel.ColumnCount; i++) tPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, width));
}
答案 2 :(得分:0)
感谢您的帮助,Sayka。 这是我使用的最终分辨率。我在这里张贴以防万一以后有人可能需要它。 TableLayoutPanel被设置为增长“AddRows”,因为它需要增长行和列,我有以下代码来处理列。 我有两个for循环删除现有的Column样式,因为一个for循环不会删除所有,它会留下最后一个。也许它不是最好的解决方案,但它确实有用。
TableLayoutPanel位于一个组框内,这是groupbox的sizeChanged事件:
private void groupBox2_SizeChanged(object sender, EventArgs e)
{
int avaiableWidth = this.groupBox2.Width;
int maxLableWidth = 150; //button width = 140 + 10 margin
this.tlpButtons.ColumnCount = avaiableWidth / maxLableWidth;
List<ColumnStyle> stylesToRemove = new List<ColumnStyle>();
foreach (ColumnStyle style in tlpButtons.ColumnStyles)
stylesToRemove.Add(style);
foreach (ColumnStyle style in stylesToRemove)
tlpButtons.ColumnStyles.Remove(style);
for (int i = 0; i < this.tlpButtons.ColumnCount; i++)
{
ColumnStyle c = new ColumnStyle();
c.SizeType = SizeType.Percent;
c.Width = Convert.ToSingle(Math.Floor((decimal)100 / (decimal)this.tlpButtons.ColumnCount));
this.tlpButtons.ColumnStyles.Add(c);
}
this.tlpButtons.Refresh();
}
欢迎任何建议或更好的想法!