设置按钮填充 WinForms 中父级的所有宽度和顶部
Set button fill all the width & top of parent in WinForms
我想创建一个带有按钮列的表单。按钮应适合表格的所有宽度。我也想尽可能把它推到表格的顶部。它应该是这样的:
|----------------------------------|
| Form caption |
|----------------------------------|
||--------------------------------||
||Button0 ||
||--------------------------------||
||--------------------------------||
||Button1 ||
||--------------------------------||
||--------------------------------||
||Button2 ||
||--------------------------------||
| |
| |
| free space |
| |
|----------------------------------|
通常我使用 C++/Qt,它有丰富的布局。据我了解,c# 在这方面不太好。我发现 TableLayoutPanel
with 1 column 可以做到这一点。我唯一想要的就是将所有按钮推到顶部。
所以我创建了以下代码:
// 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);
}
但是我得到的布局是错误的 - button0
和 button1
是预期的 40px 高度但是 button2
填满了所有 space 而我预计它将是 40px .
已添加:我找到了解决方法。我加
panelButton.Controls.Add(new Control(), 0, rowIndex);
在循环之后,它们按预期工作。
您不需要使用 TableLayoutPanel
来完成这样的任务。使用 Panel
并向其添加按钮就足够了。对于每个按钮,您需要将其 Dock
设置为 Top
。
如果你想让面板变大而不是显示卷轴,你可以设置面板AutoSize=true
和AutoScroll=false
。
如果您想要滚动条,只需将其设置为 AutoSize=false
和 AutoScroll=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 表单布局的更多信息,请查看这些文档:
我想创建一个带有按钮列的表单。按钮应适合表格的所有宽度。我也想尽可能把它推到表格的顶部。它应该是这样的:
|----------------------------------|
| Form caption |
|----------------------------------|
||--------------------------------||
||Button0 ||
||--------------------------------||
||--------------------------------||
||Button1 ||
||--------------------------------||
||--------------------------------||
||Button2 ||
||--------------------------------||
| |
| |
| free space |
| |
|----------------------------------|
通常我使用 C++/Qt,它有丰富的布局。据我了解,c# 在这方面不太好。我发现 TableLayoutPanel
with 1 column 可以做到这一点。我唯一想要的就是将所有按钮推到顶部。
所以我创建了以下代码:
// 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);
}
但是我得到的布局是错误的 - button0
和 button1
是预期的 40px 高度但是 button2
填满了所有 space 而我预计它将是 40px .
已添加:我找到了解决方法。我加
panelButton.Controls.Add(new Control(), 0, rowIndex);
在循环之后,它们按预期工作。
您不需要使用 TableLayoutPanel
来完成这样的任务。使用 Panel
并向其添加按钮就足够了。对于每个按钮,您需要将其 Dock
设置为 Top
。
如果你想让面板变大而不是显示卷轴,你可以设置面板AutoSize=true
和AutoScroll=false
。
如果您想要滚动条,只需将其设置为 AutoSize=false
和 AutoScroll=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 表单布局的更多信息,请查看这些文档: