web-dev-qa-db-ja.com

WindowsフォームのTableLayoutPanelセルの高さと幅を取得します

WindowsフォームでのTableLayoutPanelの使用。私はRowStylesとColumnStylesをそれぞれAutoSizeとPercentとしてSizeTypeとともに使用しています。特定のコントロールが配置されているセルの絶対的な高さと幅を見つける必要があります。

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で設定されます。

セルの絶対サイズをピクセル単位で取得する必要があります。

16
Brij

奇妙な理由で、Microsoftはこれらの関数をインテリセンスから隠すことにしました。

これは書かれたとおりに機能するはずです:

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

Microsoftは、GetColumnsWidths()メソッドの実装が実際に完了しなかったために、(属性EditorBrowsableState.Neverを使用して)IntellisenseからGetColumnsWidths()メソッドを非表示にすることを選択しました。 GetColumnsWidths()メソッドは配列を返します限り 1より大きいColumnSpan値を持つコントロールがTableLayoutPanelにありません。その条件が存在すると、運が悪くなり、TableLayoutPanelのGetColumnsWidths( )メソッドは代わりに空の配列を返します。

別の方法は、TableLayoutPanelのColumnStylesコレクションとRowStylesコレクションを使用することです。これは、列/行のSizeTypeがAbsoluteの場合に、それぞれ各列/行の幅/高さを返します。パーセントの場合、戻り値はパーセント値です。 AutoSizeの場合、戻り値は0のように見えます。TableLayoutPanelの合計幅を取得し、絶対列の合計幅を減算して、残りのピクセルにパーセント計算を適用することで、パーセント値をピクセル測定値にマップできます。 AutoSize列が使用されます(同じことが行にも当てはまります)。

2
Jazimov