2016-08-02 14 views
1

最初は1行しかなく、列もないTableLayoutPanelがあります。ボタンを押すことで、このパネルを5行3列に変換します。TableLayoutPanelにプログラムで列と行のスタイルを適用するにはどうすればよいですか?

private void button_Click(object sender, EventArgs e) 
    { 
     this.tableLayoutPanel1.ColumnCount = 3; 
     this.tableLayoutPanel1.RowCount = 5; 
    } 

問題は、結果としてこの問題が発生することです。

enter image description here

あなたが見ることができるように、行と列で作成されたボックスは、パネル内の同じ領域を含んでいません。

3列5行の場合、列はテーブルレイアウトアウトパネルの100%を共有する必要があります。そのため、それぞれ30%です。 5行の場合、各行は20%必要です。

したがって、次の2行のコードをbutton_Clickメソッドに追加します。

this.tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F)); 
this.tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 20F)); 

でも同じ結果が得られます。 私が紛失しているものは?

+1

なぜ空の 'TableLayoutPanel'が必要ですか?コントロールを追加するだけです([この回答](http://stackoverflow.com/a/12687222/1997232)参照)。スクリーンショットがあなたのコードと一致しません。 [mcve](http://stackoverflow.com/help/mcve)(ステップバイステップガイドまたはForm1.cs + Form1.designer.csの完全なダンプの形で)を準備すると、誰かがあなたの問題をより詳しく調べます。 – Sinatr

答えて

2

おそらく、すでに定義されているTableLayoutPanelに現在のスタイルをリセットせずにスタイルを追加しています。

tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; 
tableLayoutPanel1.Dock = DockStyle.Fill; 

tableLayoutPanel1.Controls.Clear(); 
tableLayoutPanel1.ColumnStyle.Clear(); 
tableLayoutPanel1.RowStyle.Clear(); 

tableLayoutPanel1.RowCount = 5; 
for(int x = 0; x < tableLayoutPanel1.RowCount; x++) 
    tableLayoutPanel1.RowStyles.Add(new RowStyle() { Height = 20, SizeType = SizeType.Percent }); 
tableLayoutPanel1.ColumnCount = 3; 
for(int x = 0; x < tableLayoutPanel1.ColumnCount; x++) 
    tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle() { Width = 33, SizeType = SizeType.Percent }); 
関連する問題