2016-11-06 82 views
1

我想創建一個帶有按鈕列的表單。這些按鈕應該適合所有的窗體寬度。我也希望儘可能將其推到形式頂部。它應該看起來像這樣:設置按鈕在WinForms中填充父級的所有寬度和頂部

|----------------------------------| 
|   Form caption   | 
|----------------------------------| 
||--------------------------------|| 
||Button0       || 
||--------------------------------|| 
||--------------------------------|| 
||Button1       || 
||--------------------------------|| 
||--------------------------------|| 
||Button2       || 
||--------------------------------|| 
|         | 
|         | 
|   free space    | 
|         | 
|----------------------------------| 

通常我使用C++/Qt,它有豐富的佈局。據我所知,C#並不是那麼好。我發現TableLayoutPanel與1列可以做到這一點。我唯一想要的是將所有按鈕推到頂部。 所以我創建了下面的代碼:

// 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像素高度預期,但button2填滿所有的空間時,我希望這將是40像素。

添加:我找到了解決方法。我加

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

循環後,所以他們按預期工作。

+0

設置'button.Dock'到'System.Windows.Forms.DockStyle.Top' –

+0

順便說一下,佈局與'C#'無關,這是像'Windows窗體'和'WPF'這樣的UI框架的工作,兩者都很好。 –

+0

@RezaAghaei,比也行不通。所有的按鈕都是40px高度,但佈局的高度不會增長。如果所有按鈕的高度>面板高度,則會添加滾動條 – folibis

回答

1

對於這樣的任務,您不需要使用TableLayoutPanel。使用Panel並添加按鈕就足夠了。對於每個按鈕,您需要將其Dock設置爲Top

如果您希望面板增長而不是顯示卷軸,您可以設置面板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); 
    } 
} 

注意:佈局與C#無關它是UI窗體(如Windows窗體)的工作。要了解更多關於佈局Windows窗體看看這些文件: