2016-04-09 40 views
1

私は2x2サイズの表レイアウトと長い自動サイズのラベルを各セルに持っています。 このレイアウトは、オートサイズのセルがない他のテーブルレイアウトにあります。問題を再現する ミニマルプロジェクト:最後の行が間違った高さを得たのはなぜTableLayoutPanelの行の高さが正しくない

Screenshot

using System; 
using System.Windows.Forms; 

namespace TestForms { 
    static class Program { 
     [STAThread] 
     static void Main() { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new TestForm()); 
     } 
    } 

    class TestForm : Form { 
     public TestForm() { 
      var childPanel = new TableLayoutPanel(); 
      var label8 = new Label(); 
      var label9 = new Label(); 
      var label10 = new Label(); 
      var label7 = new Label(); 
      var rootPanel = new TableLayoutPanel(); 

      childPanel.AutoSize = true; 
      childPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink; 
      childPanel.BackColor = System.Drawing.Color.Silver; 
      childPanel.ColumnCount = 2; 
      childPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); 
      childPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); 
      childPanel.Controls.Add(label8, 1, 0); 
      childPanel.Controls.Add(label9, 0, 1); 
      childPanel.Controls.Add(label10, 1, 1); 
      childPanel.Controls.Add(label7, 0, 0); 
      childPanel.Dock = DockStyle.Top; 
      childPanel.RowCount = 2; 
      childPanel.RowStyles.Add(new RowStyle()); 
      childPanel.RowStyles.Add(new RowStyle()); 

      label8.AutoSize = true; 
      label8.Text = "2ggggggggggggggggg"; 

      label9.AutoSize = true; 
      label9.Text = "label9"; 

      label10.AutoSize = true; 
      label10.Text = "label10"; 

      label7.AutoSize = true; 
      label7.Text = "label7"; 

      rootPanel.ColumnCount = 1; 
      rootPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); 
      rootPanel.Controls.Add(childPanel, 0, 0); 
      rootPanel.Dock = DockStyle.Fill; 
      rootPanel.RowCount = 1; 
      rootPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); 

      ClientSize = new System.Drawing.Size(205, 197); 
      Controls.Add(rootPanel); 
     } 
    } 
} 

私は、次のような結果を得ますか?回避策はありますか?

答えて

0

興味深いことに、あなたは次の回避策を使用することができます

などのラベルの一部AutoSizefalseであれば、それは発生しませんので、あなたには、いくつかのバグをヒットしているように思える、または最初の列スタイルSizeType.AutoSizeを作ります。それは醜いですが、それが私が見つけた唯一の方法です。考え方は、偽のLabelを含む目に見えない行をAutoSizeに設定して、falseに設定することです。たとえば、通常のレイアウトを設定した後、次の行を追加します。

childPanel.RowCount++; 
childPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 0)); 
childPanel.Controls.Add(new Label { AutoSize = false }, 0, childPanel.RowCount - 1); 
関連する問題