【问题标题】:Get height and width of TableLayoutPanel cell in Windows Forms获取 Windows 窗体中 TableLayoutPanel 单元格的高度和宽度
【发布时间】:2012-11-23 10:13:05
【问题描述】:

在 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。

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

【问题讨论】:

    标签: c# .net winforms cell tablelayoutpanel


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      这应该像写的那样工作:

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

      【讨论】:

      • 我不知道可以对智能感知隐藏功能,谢谢!
      • 通常是因为您继承了一个控件并使其中一个基本属性无用。例如,PictureBox 上的 Font 属性是隐藏的,主要是因为它不是 PictureBox 控件试图完成的有用属性。
      • 你是圣人!
      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多