TableLayoutPanel中的RowStyles和Rows不匹配?

时间:2013-11-28 21:37:22

标签: c# .net winforms tablelayoutpanel

我们将控件隐藏在TableLayoutPanel中。我们一直使用以下代码来隐藏不应该可见的行。

int controlRow = m_panel.GetPositionFromControl(control).Row;

m_panel.RowStyles[controlRow].SizeType = SizeType.Absolute;
m_panel.RowStyles[controlRow].Height = 0;

现在我们一直在添加更多行,突然之间我们遇到了索引问题。 RowStyles比Rows更少。

There are more rows than rowstyles. Screencap from debugging.

有什么可疑的事情发生,或者我误解了TableLayoutPanel是如何运作的?

1 个答案:

答案 0 :(得分:9)

我试过深入研究这个问题。问题是您没有以正确的方式添加行。要正确添加行,您必须确保RowCount的值和RowStyles的数量相等。您可以在tableLayoutPanel的自动生成代码中的Form1.Designer.cs中看到这一点。所以你应该做这样的事情:

//add a new row
tableLayoutPanel.RowCount++;
tableLayoutPanel.RowStyles.Add(newRowStyle);

事实上,不匹配并不会导致非常严重的问题。当RowStyles.Count大于实际RowCount时,所有顶部RowStyles(其数量等于RowCount)将用于设置行的样式,其余的可以看作< EM>储备。当RowStyles.Count小于实际RowCount时,会有一些行没有任何样式,可能会折叠。无论如何使用我上面发布的代码添加新行将帮助您避免任何问题。关键是我们必须确保行数和RowStyles的数量相等。