2015-02-17 2 views
2

Мне нужно узнать высоту и ширину ячейки, в которой я разместил кнопку. RowStyles и ColumnStyles оба установлены в Percent, TableLayoutPanel's Dock - Fill, а также Dock кнопки.Получить высоту и ширину из ячейки TableLayoutPanel

TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetCellPosition(button1); 
int width = tableLayoutPanel1.GetColumnWidths()[pos.Column]; 
int height = tableLayoutPanel1.GetRowHeights()[pos.Row]; 

Но это не работает. Я получаю следующее сообщение об ошибке:

"An unhandled exception of type 'System.IndexOutOfRangeException' occurred in < my program name.exe >

Additional information: Index outside of bounds of array."

Я думаю, что проблема в том, что мое приложение для .NET 3.5 (и не может получить какой-либо выше).
Как мне получить высоту и ширину ячейки?

+0

использовать 'GetPositionFromControl' вместо' GetCellPosition' и сообщить нам результат – dotctor

+0

попытаться отладить возвращаемое tableLayoutPanel1.GetColumnWidths(). Я думаю, что это исключение выбрано потому, что pos.column больше границы массива tableLayoutPanel1.GetColumnWidths(). То же самое со строками. – puko

+1

вы уверены, что 'button1' находится в' tableLayoutPanel1'? если вы не получаете -1 для 'pos.Column' и' pos.Row', и это приводит к 'IndexOutOfRangeException' – dotctor

ответ

1

Я думаю, проблема в том, что button1 не находится в tableLayoutPanel1. , поэтому вызывающий tableLayoutPanel1.GetCellPosition(button1) результат (-1, -1) и int width = tableLayoutPanel1.GetColumnWidths()[-1]; абсолютно выбрасывает IndexOutOfRangeException.

+1

Выключенная кнопка находилась внутри панели, она работала, когда я тестировал ее против панели, а не кнопки. Какая глупая ошибка. – soulblazer

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