2016-10-21 10 views
1

TableLayoutPanelすべての行のデフォルトの高さをC#で16pxに設定するにはどうすればよいですか?TableLayoutPanelの行のデフォルトの高さを設定する

通常、私はどうなる:

for (int i = 0; i < amount_of_rows; i++) 
{ 
    panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16)); 
} 

しかし、私の場合は私が8列と行の未知の量を持っています。行の量は、すべてのコントロールが追加された後ではなく、以前には追加されていません。

これは私のコードです:

TableLayoutPanel panel = new TableLayoutPanel 
{ 
    BackColor = SystemColors.Control, 
    CellBorderStyle = TableLayoutPanelCellBorderStyle.Single, 
    AutoScroll = true, 
    Width = 500, 
    Location = new Point(-1, -1), 
    ColumnCount = 8 
}; 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 

int amountOfRows = 0; 
for (...) 
{ 
    // a lot of code which populates panel with generated controls and counts amountOfRows 
} 
panel.RowCount = amountOfRows; 
Controls.Add(panel); 

ようなコードは、24ピクセルの高さで行を作成します。

それは次のように移入された後、テーブルにColumnStylesを追加:

for (int i = 0; i < amountOfRows ; i++) 
{ 
    panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16)); 
} 

は動作しますが、それは最後の行が非常に大きくなります。

EDIT:コントロールの追加を含むサンプルコード:

TableLayoutPanel panel = new TableLayoutPanel 
{ 
    BackColor = SystemColors.Control, 
    CellBorderStyle = TableLayoutPanelCellBorderStyle.Single, 
    AutoScroll = true, 
    Width = 500, 
    Location = new Point(-1, -1), 
    ColumnCount = 8, 
    Margin = new Padding(0), 
    Padding = new Padding(0) 
}; 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 16)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 73)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 38)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 52)); 

for (int i = 0; i < 10; i++) // lets assume we don't know it will be added 10x 
{ 
    CheckBox exchangeEnabled = new CheckBox 
    { 
     Margin = new Padding(0), 
     Padding = new Padding(0), 
     Dock = DockStyle.Fill, 
     CheckAlign = ContentAlignment.MiddleCenter 
    }; 
    panel.Controls.Add(exchangeEnabled, 0, i); 
} 
Controls.Add(panel); 

答えて

0

私はあなたが24個のピクセルの高さで細胞を取得する理由は、あなたが16個のピクセルの高さとコントロールを追加しているということであることを前提としています。

値を変更しない限り、デフォルトのMarginPaddingの値は、すべての面で3ピクセルです。

これにより、2×3 + 2×3の余分なピクセルが得られ、セルの合計高さは24ピクセルになります。

高さを制御するには、追加するコントロールの高さだけでなく、TLPのPaddingと子のMargin値の高さも制御する必要があります。

これは、子コントロールのドッキング行動がある

MSDN:

..また、行または列を拡大する方法と、私はピクセル完璧な方法でコントロールを配置/整列させる知っている唯一の方法です他のコンテナコントロールと同じです。

TableLayoutPanelの子コントロールの固定動作は、 と他のコンテナコントロールの動作が異なります。 子コントロールのAnchorプロパティの値がLeftまたはRightに設定されている場合、コントロール は、コントロールのMarginプロパティとパネルのパネルの合計である の距離に、セルの左または右の境界に配置されますパディングプロパティ。 Left値とRight値の両方が設定されている場合、 コントロールはセルの幅に合わせてサイズ変更され、余白は であり、パディング値も考慮されます。トップとボトムのアンカーの動作は類似しています。詳細については、「方法:アンカーと TableLayoutPanelコントロール内の子コントロールをドックする」を参照してください。

あなたは 他のコンテナコントロールのデフォルトのアンカー動作を模倣するために子コントロールが必要な場合は、コントロールの ボーダーとセルの境界線との間の距離を一定に維持するために、マージンやパディング プロパティを調整することができます。

+0

ありがとうございますが、何も変わりません。私はMargin =新しいPadding(0)、Padding =新しいPadding(0)をTableLayoutPanelとそのコントロールに追加しました。私はコントロールを追加することを含むサンプルコードを追加しました。それとも、私はあなたを完全に理解していないのですか? – LukAss741

+0

うーん、いいえ、あなたは私の権利を得た。大きいパディング/マージンを設定するときに影響を見ることができますか? - 最大値は何ですか?ハイツ?デフォルトでは、CheckBoxは自動サイズ調整をオンにしているので、高さはFontsizeに依存します。 – TaW

+0

高さ= 16に設定されたすべてのコントロールを設定します。マージンとパディングが0であっても、何らかの理由で周囲にスペースが追加されます。正確な高さを指定した後で動作します。私に正しい方向を指摘してくれてありがとう。 – LukAss741

関連する問題