C# 如何用大小相等的按钮填充面板

C# 如何用大小相等的按钮填充面板,c#,winforms,C#,Winforms,我有一个面板,在面板内有两个或更多(将来)按钮 如何使这些按钮完全填满面板,并在应用程序运行期间独立地具有与面板大小变化相同的大小 编辑:根据讨论调整大小事件的答案。问题是,当添加“下一步”按钮时,它不会自动调整其余按钮的大小。此外,据我所知,只有当面板调整大小时,才会发生这种调整,首先我必须在设计器中仔细设置按钮的大小。理想的解决方案将像Java的GridLayout->一样工作,不必担心任何按钮的大小 您可以依靠面板的SizeChanged事件来获得所需的内容。示例代码: private

我有一个
面板
,在
面板
内有两个或更多(将来)按钮

如何使这些按钮完全填满
面板
,并在应用程序运行期间独立地具有与
面板
大小变化相同的大小

编辑:根据讨论调整大小事件的答案。问题是,当添加“下一步”按钮时,它不会自动调整其余按钮的大小。此外,据我所知,只有当
面板
调整大小时,才会发生这种调整,首先我必须在设计器中仔细设置按钮的大小。理想的解决方案将像Java的
GridLayout
->一样工作,不必担心任何按钮的大小


您可以依靠面板的
SizeChanged
事件来获得所需的内容。示例代码:

 private void Form1_Load(object sender, EventArgs e)
 {
     panel1.Dock = DockStyle.Fill;
     panel1.SizeChanged += panel1_SizeChanged;

 }

 private void panel1_SizeChanged(object sender, EventArgs e)
 {
     resizeButtons();
 }

 private void resizeButtons()
 {
     int totButtons = panel1.Controls.OfType<Button>().Count();

     Point curPos = new Point(0, 0);
     foreach(Button but in panel1.Controls.OfType<Button>())
     {
         but.Width = panel1.Width / totButtons; 
         but.Location = curPos;
         curPos = new Point(curPos.X + but.Width, 0);
     }
 }
private void Form1\u加载(对象发送方,事件参数e)
{
面板1.Dock=DockStyle.Fill;
panel1.SizeChanged+=panel1_SizeChanged;
}
private void panel1_SizeChanged(对象发送方,事件参数e)
{
调整按钮();
}
私有void resizeButtons()
{
int totButtons=panel1.Controls.OfType().Count();
点curPos=新点(0,0);
foreach(按钮,但位于panel1.Controls.OfType()中)
{
但是。宽度=面板1。宽度/按钮;
但是,位置=curPos;
curPos=新点(curPos.X+但宽度,0);
}
}

此代码确保无论
Panel1
的大小有多大的变化,任意数量的按钮都会填满所有水平空间。

您希望它们调整大小以使面板始终充满相同大小的按钮吗?@OndrejJanacek是的,没错。但是在将来会有3个按钮。但是当面板不改变它的尺寸时,它就不能工作了?当我添加第三个按钮时,我需要除以3?我在寻找类似的东西:@Yoda抱歉,我以为你指的是2个按钮。将简要返回。@Yoda更新的代码负责水平调整大小。您还想要垂直空间吗?你必须设置进一步的结构,比如最少的按钮数量。效果很好。最后一个问题。首次绘制
面板
时也会发生调整大小事件(尽管大小保持原始)?@Yoda,具体取决于此。它在我的代码中被调用,因为我设置了.Dock=DockStyle.Fill;(或者如果您更改了表单加载的大小);否则不称为。但是您可以直接调用该函数。