2016-11-06 4 views
1

ボタンの列を含むフォームを作成したいと思います。ボタンはすべての幅のフォームに収まる必要があります。また、私は可能な限りフォームの上にそれをプッシュしたい。設定ボタンは、WinForms内のすべての幅と親の上に塗りつぶします

通常、私はC++/Qtで動作し、レイアウトは豊富です。私は理解しているので、C#はあまり良くありません。私は、1列のTableLayoutPanelがそれを行うことができることを発見しました。私が欲しいのは、すべてのボタンを一番上に押すことだけです。 だから私は、次のコードを作成しました:

// panelButton was created by VS with following params: 
this.panelButton = new System.Windows.Forms.TableLayoutPanel(); 
this.panelButton.Dock = System.Windows.Forms.DockStyle.Fill; 
this.panelButton.Name = "panelButton"; 
this.panelButton.RowCount = 1; 


for(int i = 0;i < 3;i ++) 
{ 
    Button button = new Button(); 
    button.Dock = DockStyle.Fill; 
    button.Height = 40; 
    button.Text = "Button" + i; 
    button.Click += new EventHandler(delegate(object o, EventArgs args) {}); 
    panelButton.Controls.Add(button, 0, i); 
} 

をしかし、私は取得レイアウトが間違っている - 予想通りbutton0button1は40ピクセルの高さですが、私はそれが40ピクセルになります期待していたときにbutton2は、すべての空間を満たします。

追加:回避策が見つかりました。私はループの後に

panelButton.Controls.Add(new Control(), 0, rowIndex); 

を追加し、期待どおりに動作します。

+0

セットの '' button.Dock' System.Windows.Forms.DockStyle.Top' –

+0

へちなみに、レイアウトは 'C# 'とは関係がありません.Windows FormsとWPFのようなUIフレームワークの両方がうまく動作します。 –

+0

@RezaAghaeiも、動作しません。すべてのボタンの高さは40ピクセルですが、レイアウトの高さは増加しません。すべてのボタンの高さ>パネルの高さでスクロールバーを追加する場合 – folibis

答えて

1

このようなタスクにはTableLayoutPanelを使用する必要はありません。 Panelを使用してボタンを追加するだけで十分です。各ボタンのDockTopに設定する必要があります。

スクロールを表示する代わりにパネルを大きくしたい場合は、パネルAutoSize=trueAutoScroll=falseを設定することができます。

スクロールバーが必要な場合は、AutoSize=falseAutoScroll=trueと設定します。

例1

ボタンのリストを有するパネルを含む自動大き形態:(Screenshot)

public Form1() 
{ 
    InitializeComponent(); 
    this.Controls.Clear(); 
    this.AutoSize = true; 
    this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 
    var panel = new Panel(); 
    panel.Dock = DockStyle.Fill; 
    panel.AutoScroll = false; 
    panel.AutoSize = true; 
    panel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 
    this.Controls.Add(panel); 
    for (int i = 0; i < 20; i++) 
    { 
     var buttun = new Button(); 
     buttun.Text = string.Format("Button {0}", i + 1); 
     buttun.Dock = DockStyle.Top; 
     panel.Controls.Add(buttun); 
    } 
} 

例2

自動スクロールパネルを含むフォームボタンのリストを持っています:(Screenshot)

public Form1() 
{ 
    InitializeComponent(); 
    this.Controls.Clear(); 
    this.AutoSize = false; 
    var panel = new Panel(); 
    panel.Dock = DockStyle.Fill; 
    panel.AutoScroll = true; 
    this.Controls.Add(panel); 
    for (int i = 0; i < 20; i++) 
    { 
     var buttun = new Button(); 
     buttun.Text = string.Format("Button {0}", i + 1); 
     buttun.Dock = DockStyle.Top; 
     panel.Controls.Add(buttun); 
    } 
} 

注:レイアウトは、それは、WindowsフォームのようなUIフレームワークの仕事ですC#とは関係ありません。 Windowsフォームでのレイアウトの詳細についてはするには、これらのドキュメントを見てみましょう:

関連する問題