2016-07-07 18 views
-3

パネルがあり、それぞれにラベルが1つあります。私はこのコードを使用していラベルの高さに合わせるパネルの高さ

...私はラベルの高さにパネルの高さに合わせすることはできません :すべてが1つのものを除いて正常に動作します

 Point location = new Point(0, 0); 
     ColorConverter cc = new ColorConverter(); 

     foreach (var item in temp) 
     { 
      Panel pan = new Panel(); 
      pan.AutoSize = false; 
      pan.Width = this.Width-75; 
      pan.Location = location; 
      pan.BackColor = (Color)cc.ConvertFromString("#" + item.Item3); 
      Label lbl = new Label(); 
      lbl.Font = new Font("Arial", 12); 
      lbl.ForeColor = Color.White; 
      lbl.Text = item.Item2; 
      lbl.AutoSize = true; 
      lbl.MaximumSize = new Size(pan.Width - 5, 0); 
      lbl.Width = pan.Width - 10; 
      lbl.Location = new Point(lbl.Location.X + 5, lbl.Location.Y + 5); 
      //pan.Height = lbl.Height + 5; 
      pan.Controls.Add(lbl); 
      flowLayoutPanel1.Controls.Add(pan); 
      location = new Point(location.X - pan.Height, location.Y); 
     } 

を私はこれをやってみました:

pan.Height = lbl.Height + 5; 

しかし、それはパネルは、あまりにも小さいです...

+3

参照するように宣言されていますパネルを使用する点。ただしないと、この問題を解決する必要はありません。 –

+0

@ HansPassant私は1つ必要です – ioncodes

+0

パネルにラベルをドッキングし、パネルのAutoSizeをtrueに設定し、AutoSizeModeをGrowAndShrinkに設定します。次に、パネルのパディングを5に設定することができます。ラベルのサイズや位置を気にする必要はありません。 – Kinetic

答えて

0

あなたは、パネルにラベルをドッキングしてみてくださいtrueにパネルAutoSizeプロパティを設定し、GrowAndShrinkにAutoSizeModeを設定することができます。次に、あなたが5に使用すると、ラベルのサイズや位置

foreach (var item in temp) 
{ 
    Panel pan = new Panel(); 
    pan.Padding = new Padding(5); 
    pan.AutoSize = true; 
    pan.AutoSizeMode = AutoSizeMode.GrowAndShrink; 
    pan.BackColor = (Color)cc.ConvertFromString("#" + item.Item3); 
    Label lbl = new Label(); 
    lbl.Dock = DockStyle.Fill; 
    lbl.Font = new Font("Arial", 12); 
    lbl.ForeColor = Color.White; 
    lbl.Text = item.Item2; 
    lbl.AutoSize = true; 
    lbl.MaximumSize = new Size(pan.Width - 5, 0); 
    pan.Controls.Add(lbl); 
    flowLayoutPanel1.Controls.Add(pan); 
    location = new Point(location.X - pan.Height, location.Y); 
} 

編集を心配する必要はありませんその方法をパネルパディングを設定することができますパディングを忘れてしまいました。

+0

ラベルをパネルに「ドッキング」する行はどれですか?編集:あなたが編集したことを心配しないでください – ioncodes

+0

パディングとドッキングラインの両方が欠けていました。私は私の答えに両方を加えました。 – Kinetic

+0

なぜ2行コメントしましたか?もし私がそれをしても、それはたくさんの小さなキューブを作ります。また、どのように私はそれがautosize場合は何かに固定パネルの幅を設定することはできますか? – ioncodes

2

FlowLayoutPanel内のラベルの周りに余白を表示するために、パネルを使用しているようです。このような場合は、代わりにラベルの余白を設定し、パネルを使用しないでください:

lbl.Margin = new Padding(5, 5, 80, 5); 

または

lbl.Margin = new Padding(5); // If all margins are equal 

をコンストラクタはこの

ハード
public Padding(int left, int top, int right, int bottom) 

public Padding(int all) 
+2

または、左、上、右、下がすべて等しい場合は、 'new Padding(5) ' です。 – Kinetic

関連する問題