C# 设置按钮填充所有宽度&;WinForms中父级的顶部

C# 设置按钮填充所有宽度&;WinForms中父级的顶部,c#,winforms,layout,tablelayoutpanel,C#,Winforms,Layout,Tablelayoutpanel,我想创建一个包含按钮列的表单。按钮应适合窗体的所有宽度。我也希望尽可能把它推到最佳状态。应该是这样的: |----------------------------------| | Form caption | |----------------------------------| ||--------------------------------|| ||Button0 || ||-----------

我想创建一个包含按钮列的表单。按钮应适合窗体的所有宽度。我也希望尽可能把它推到最佳状态。应该是这样的:

|----------------------------------|
|           Form caption           |
|----------------------------------|
||--------------------------------||
||Button0                         ||
||--------------------------------||
||--------------------------------||
||Button1                         ||
||--------------------------------||
||--------------------------------||
||Button2                         ||
||--------------------------------||
|                                  |
|                                  |
|           free space             |
|                                  |
|----------------------------------|
通常我使用C++/Qt,它有丰富的布局。据我所知,c#在这方面不太好。我发现有一列的
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);
}

循环之后,它会按预期工作。

您不需要使用
表格布局面板来执行此任务。使用
面板
并添加按钮就足够了。对于每个按钮,您需要将其
Dock
设置为
Top

如果希望面板增长而不是显示滚动条,可以设置面板
AutoSize=true
AutoScroll=false

如果需要滚动条,只需将其设置为
AutoSize=false
AutoScroll=true

示例1

自动调整大小的表单,其中包含一个面板,该面板具有按钮列表:

public Form1()
{
初始化组件();
this.Controls.Clear();
this.AutoSize=true;
this.AutoSizeMode=System.Windows.Forms.AutoSizeMode.growtandshrink;
变量面板=新面板();
panel.Dock=DockStyle.Fill;
panel.AutoScroll=false;
panel.AutoSize=true;
panel.AutoSizeMode=System.Windows.Forms.AutoSizeMode.growtandshrink;
此.Controls.Add(面板);
对于(int i=0;i<20;i++)
{
var buttun=新按钮();
buttun.Text=string.Format(“按钮{0}”,i+1);
buttun.Dock=DockStyle.Top;
面板.控件.添加(Button);
}
}
示例2

包含自动滚动面板的表单,该面板具有按钮列表:

public Form1()
{
初始化组件();
this.Controls.Clear();
this.AutoSize=false;
变量面板=新面板();
panel.Dock=DockStyle.Fill;
panel.AutoScroll=true;
此.Controls.Add(面板);
对于(int i=0;i<20;i++)
{
var buttun=新按钮();
buttun.Text=string.Format(“按钮{0}”,i+1);
buttun.Dock=DockStyle.Top;
面板.控件.添加(Button);
}
}
注意:布局与
C#
无关,它是像Windows窗体这样的UI框架的工作。要了解有关windows窗体中布局的更多信息,请查看以下文档:


设置
按钮.Dock
System.Windows.Forms.DockStyle.Top
顺便说一句,布局与
C#
无关,这是
Windows表单
WPF
等UI框架的工作,它们都很好地工作。@RezaAghaei,than也不起作用。所有按钮的高度均为40px,但布局的高度不会增加。如果所有按钮的高度>面板的高度,则添加滚动条如果希望面板增长而不是显示滚动条,请将其自动大小设置为true。好的,使用
AutoSize=true
+
panelButton.Dock=DockStyle.Top
的技巧可以按预期工作。谢谢你能添加你的评论作为回答吗?
panelButton.Controls.Add(new Control(), 0, rowIndex);
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);
    }
}
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);
    }
}