获取 Windows Forms 中 TableLayoutPanel 单元格的高度和宽度

21

在Windows Forms中使用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设置为百分比,大小为33.33。

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

2个回答

39

由于某种奇怪的原因,微软决定将这些函数隐藏在智能感知中。

按照原样编写应该可以正常工作:

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

2
我不知道可以从Intellisense中隐藏一个函数,谢谢! - omerfarukdogan
@farukdgn 请查看 BrowsableAttribute 类 - LarsTech
1
通常是因为您继承了一个控件并使其中一个基本属性变得无用。例如,PictureBox上的Font属性被隐藏了,主要是因为它对于PictureBox控件试图实现的目标来说不是一个有用的属性。 - LarsTech
你是一个圣人! - J. Doe

3
微软选择使用EditorBrowsableState.Never属性将GetColumnsWidths()方法隐藏在Intellisense中,很可能是因为他们从未真正完成GetColumnsWidths()方法的实现。只要TableLayoutPanel中没有一个控件的ColumnSpan值大于1,GetColumnsWidths()方法就会返回一个数组。一旦存在这种情况,您就没有机会了,TableLayoutPanel的GetColumnsWidths()方法将返回一个空数组。
另一种方法是使用TableLayoutPanel的ColumnStyles和RowStyles集合--分别返回每个列/行的宽度/高度,当列/行的SizeType为Absolute时。当它为百分比时,返回值为百分比值;当AutoSize时,返回值似乎为0。如果没有使用AutoSize列(行),则可以通过将TableLayoutPanel的总宽度减去任何绝对列的总宽度,然后对剩余像素应用百分比计算来将百分比值映射到像素测量上(行同理)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接