在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。
我需要获得单元格的绝对大小。
答案 0 :(得分:28)
由于一些奇怪的原因,微软决定将这些功能隐藏在intellisense中。
这应该按照书面形式工作:
TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetCellPosition(button1);
int width = tableLayoutPanel1.GetColumnWidths()[pos.Column];
int height = tableLayoutPanel1.GetRowHeights()[pos.Row];
答案 1 :(得分:2)
Microsoft选择隐藏Intellisense的GetColumnsWidths()方法(使用属性EditorBrowsableState.Never),这可能是因为它们从未真正完成GetColumnsWidths()方法的实现。只要在TableLayoutPanel中没有控件的ColumnSpan值大于1,GetColumnsWidths()方法就会返回一个数组。一旦存在该条件,您就很不走运,而TableLayoutPanel的GetColumnsWidths( )方法将返回一个空数组。
一种替代方法是使用TableLayoutPanel的ColumnStyles和RowStyles集合-当column / row SizeType为Absolute时,它们分别返回每个列/行的宽度/高度。当它是Percent时,返回值是一个百分比值;当它为AutoSize时,返回值似乎为0。您可以通过获取TableLayoutPanel的总宽度并减去任何绝对列的总宽度,然后将百分比值映射到像素测量,如果没有,则将百分比计算应用于其余像素使用AutoSize列(同样适用于行)。