Получить высоту и ширину ячейки TableLayoutPanel в Windows Forms

использование TableLayoutPanel в Windows Forms. Я использую RowStyles и ColumnStyles с Размертип как AutoSize и процентов соответственно. Мне нужно выяснить абсолютную высоту и ширину ячейки, в которой находится конкретный элемент управления.

TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetCellPosition(button1);
int height = (int)tableLayoutPanel1.RowStyles[pos.Row].Height;
int width = (int)tableLayoutPanel1.ColumnStyles[pos.Column].Width;

выше, я получаю высоту как 0. RowStyle имеет тип SizeType как AutoSize. Аналогично, я получаю 33.33. ColumnStyle устанавливается с SizeType в процентах и Size = 33.33.

Мне нужно получить абсолютный размер в пикселях для клетка.

2 ответов


по какой-то странной причине Microsoft решила скрыть эти функции от intellisense.

Это должно работать, как написано:

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

Microsoft решила скрыть метод GetColumnsWidths () от Intellisense (используя атрибут EditorBrowsableState.Никогда) вероятно, потому что они никогда не заканчивали реализацию метода GetColumnsWidths (). Метод GetColumnsWidths () возвращает массив пока в TableLayoutPanel нет элемента управления со значением ColumnSpan больше 1. Как только это условие существует, вам не повезло, и метод GetColumnsWidths() TableLayoutPanel вернет вместо этого пустой массив.

альтернативой является использование коллекций ColumnStyles и RowStyles TableLayoutPanel,которые возвращают ширину / высоту каждого столбца / строки, соответственно, когда тип размера столбца/строки является абсолютным. Когда это процент, возвращаемое значение-это процентное значение; когда это AutoSize, возвращаемое значение кажется равным 0. Можно сопоставить процентное значение с измерением пикселя, взяв общую ширину панели TableLayoutPanel и вычитая общую ширину любого Абсолюта затем столбцы применяют процентное вычисление к оставшимся пикселям, если не используются столбцы автоматической настройки (то же самое относится к строкам).