如何将面板中的内容集中在一起?

时间:2014-12-30 09:52:19

标签: c# winforms alignment

我有一个面板,我试图将控件集中在其中。但显然,当面板停靠在控件的边缘时,面板不喜欢填充。这是我的面板的当前代码:

buttonPanel = new Panel();
buttonPanel.Width = 300;
buttonPanel.Height = 50;
buttonPanel.Dock = DockStyle.Bottom;
buttonPanel.Padding = new Padding((this.ClientSize.Width - buttonPanel.Width) / 2, 0,
                                 (this.ClientSize.Width - buttonPanel.Width) / 2, 0);
buttonPanel.BackColor = Color.Transparent;
this.Controls.Add(buttonPanel);

我在面板内放置了一个按钮。我对上述代码的期望是,控件被放置在一个300宽的矩形的左边。#34;以小组为中心。但是按钮位于最左侧,就好像忽略了填充:

enter image description here

如何将按钮集合置于表单中心?

2 个答案:

答案 0 :(得分:2)

设计时间方法

在设计时,将按钮放入容器中并选择按钮。然后,从布局工具栏中使用水平居中垂直居中,将按钮置于面板中央。之后,转到按钮属性并从Anchor属性中删除每个锚点。

编码方法

Panel panel = new Panel();
panel.Size = new Size(300, 100);
panel.Dock = DockStyle.Bottom;

Button button = new Button();
button.Size = new Size(70, 25);
button.Location = new Point((panel.Width - button.Width) / 2, (panel.Height - button.Height) / 2);
button.Anchor = AnchorStyles.None;

panel.Controls.Add(button);
this.Controls.Add(panel);

答案 1 :(得分:1)

您必须通过设置按钮的位置而不是面板的填充来对齐面板内的按钮:

button1.Left = (int)(panel1.Width * 0.5f - button1.Width * 0.5f);
button1.Top = (int)(panel1.Height * 0.5f - button1.Height * 0.5f);

button1.Location = new Point()
{
    X = panel1.Width / 2 - button1.Width / 2,
    Y = panel1.Height / 2 - button1.Height / 2
};

结果是一样的。

如果您覆盖OnResize方法,当您更改表单大小时,按钮也将保持居中:

protected override void OnResize(EventArgs e)
{
    button1.Location = new Point()
    {
        X = panel1.Width / 2 - button1.Width / 2,
        Y = panel1.Height / 2 - button1.Height / 2
    };
    base.OnResize(e);
}