我们将控件隐藏在TableLayoutPanel
中。我们一直使用以下代码来隐藏不应该可见的行。
int controlRow = m_panel.GetPositionFromControl(control).Row;
m_panel.RowStyles[controlRow].SizeType = SizeType.Absolute;
m_panel.RowStyles[controlRow].Height = 0;
现在我们一直在添加更多行,突然之间我们遇到了索引问题。 RowStyles比Rows更少。
有什么可疑的事情发生,或者我误解了TableLayoutPanel
是如何运作的?
答案 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
的数量相等。