18

在 Windows 窗体中使用 TableLayoutPanel。我使用 RowStyles 和 ColumnStyles SizeType 分别作为 AutoSize 和 Percent。我需要找出放置特定控件的单元格的绝对高度和宽度。

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 为 Percent,Size = 33.33。

我需要以像素为单位获取单元格的绝对大小。

4

2 回答 2

34

出于某种奇怪的原因,微软决定对智能感知隐藏这些功能。

这应该像写的那样工作:

  TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetCellPosition(button1);
  int width = tableLayoutPanel1.GetColumnWidths()[pos.Column];
  int height = tableLayoutPanel1.GetRowHeights()[pos.Row];
于 2012-12-05T15:06:38.730 回答
3

Microsoft 选择从 Intellisense 隐藏 GetColumnsWidths() 方法(使用属性 EditorBrowsableState.Never)可能是因为他们从未真正完成 GetColumnsWidths() 方法的实现。只要TableLayoutPanel 中没有 ColumnSpan 值大于 1 的控件,GetColumnsWidths() 方法就会返回一个数组。一旦该条件存在,您就不走运了,TableLayoutPanel 的 GetColumnsWidths() 方法将返回一个空数组反而。

另一种方法是使用 TableLayoutPanel 的 ColumnStyles 和 RowStyles 集合——当列/行 SizeType 为 Absolute 时,它​​们分别返回每列/行的宽度/高度。为百分比时,返回值为百分比值;当它是 AutoSize 时,返回值显示为 0。您可以通过获取 TableLayoutPanel 的总宽度并减去任何绝对列的总宽度然后将百分比计算应用于剩余像素(如果没有),将百分比值映射到像素测量值使用 AutoSize 列(同样适用于行)。

于 2018-08-23T19:55:08.780 回答