2013-11-28 6 views
3

Мы скрываем элементы управления в TableLayoutPanel. Некоторое время мы использовали следующий код для скрытия строки, которая не должна быть видимой.Строки и строки RowStyles не совпадают в TableLayoutPanel?

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

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

Теперь мы добавляем больше строк, и внезапно у нас возникают проблемы с индексами. Есть меньше RowStyles, чем строк.

There are more rows than rowstyles. Screencap from debugging.

Есть ли что-то подозрительное происходит, или я не понял, каким образом TableLayoutPanel работает?

+0

Ну, почему бы и нет. Назначение RowCount может, конечно, не соответствовать количеству вызовов RowStyles.Add(). Снимок экрана не помогает нам найти ошибку. Посмотрите на InitializeComponent, если вы использовали конструктор, используйте отладчик, если используете код. –

+0

Я не вижу никаких добавлений кода RowStyles кодом. Я думаю, что они созданы неявно. Эти 2 строки выше - все совпадения, которые я получаю во всем проекте, ищущем «RowStyles». –

ответ

9

Я попытался разобраться в этом вопросе. Проблема в том, что вы не добавляли строки правильно. Чтобы правильно добавить строки, вы должны обеспечить значение RowCount, а число RowStyles должно быть равным. Вы можете увидеть это прямо в Form1.Designer.cs в автогенерированном коде для таблицыLayoutPanel. Так что вы должны сделать что-то вроде этого:

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

несовпадение фактически не вызывает очень серьезную проблему. Когда RowStyles.Count больше, чем фактический RowCount, все верхние строки RowStyles (который имеет счет, равный RowCount), будут использоваться для стилей строк, остальное можно увидеть как резерв. Когда RowStyles.Count меньше фактического RowCount, будут некоторые строки, которые не имеют никакого стиля и могут быть свернуты. В любом случае, используя код, который я написал выше, чтобы добавить новую строку, вы сможете избежать какой-либо проблемы. Дело в том, что мы должны обеспечить равное количество строк и число RowStyles.

+0

Означает ли это, что я могу добавить новый рядный стиль позже, если это необходимо? Как, например, перед тем, как я хочу скрыть это? –

+0

Это обновленный проект, который не содержит файл Form.designer.cs. Это все в Form.cs. Кроме того, во всем проекте нет RowStyles.Add. –

+0

@CarlR Как я уже сказал, вы должны синхронизировать свои RowStyles и RowCount, иначе вы можете столкнуться с некоторой проблемой, о которой я упомянул в конце своего ответа (что не слишком серьезно). –

Смежные вопросы