在.NET(Winforms)中的表单中居中控件?

时间:2009-01-29 12:27:02

标签: c# .net winforms center-align

我正在尝试将固定大小的控件集中在表单中。

出于兴趣,是否有一种非愚蠢的做法?我真正想要的是类似于text-align css属性的东西。

目前,我正在将周围表单的填充属性设置为合适的大小,并将控件的Dock属性设置为填充。

10 个答案:

答案 0 :(得分:240)

您可以使用 anchors 来实现这一目标。或者更准确地说不使用它们

默认情况下,控件固定在窗体的左上角,这意味着当窗体大小发生更改时,它们与窗体左上角的距离将保持不变。如果您将控件锚更改为左下角,那么当窗体调整大小时,控件将与窗体的左侧和左侧保持相同的距离。

在调整大小时,关闭方向上的锚点将使控件保持在该方向的中心位置。

注意:通过VS2015中的属性窗口关闭锚点可能需要输入None,None(而不是默认的Top,Left)

答案 1 :(得分:103)

myControl.Left = (this.ClientSize.Width - myControl.Width) / 2 ;
myControl.Top = (this.ClientSize.Height - myControl.Height) / 2;

答案 2 :(得分:40)

由于您没有说明表单是否可以调整大小,如果您不关心调整大小(如果您关心,请使用Mitch Wheats解决方案),则可以轻松实现:

选择控件 - >格式(菜单选项) - >窗口中心 - >水平或垂直

答案 3 :(得分:8)

我找到了一个很好的方法,它可以使用多个控件。添加一个包含3列的TableLayout。使中心列为绝对大小(无论您需要多大的空间)。将两个外部列设置为100%。将面板添加到中间列并添加所需的任何控件并将它们放在所需的位置。该中心面板现在将保持在您的表单中心。

答案 4 :(得分:6)

要将按钮置于其他容器的面板o中,请执行以下步骤:

  1. 在设计时设置位置
  2. 转到按钮的属性锚点并将此值设置为跟随图片
  3. enter image description here

答案 5 :(得分:2)

您可以将要控制的控件置于Panel中间,并将左右填充值设置为大于默认值的值。只要它们相等并且您的控件锚定在Panel的两侧,那么它将显示在该Panel的中心。然后,您可以根据需要将容器Panel锚定到其父级。

答案 6 :(得分:1)

您可以将所有控件放到面板上,然后编写代码将面板移动到表单的中心。

panelMain.Location = 
    new Point(ClientSize.Width / 2 - panelMain.Size.Width / 2, 
              ClientSize.Height / 2 - panelMain.Size.Height / 2);

panelMain.Anchor = AnchorStyles.None;

答案 7 :(得分:0)

它涉及眼球(我想你可以拿出一个计算器并计算)但只需在表格上插入所述控件然后删除任何锚定(锚=无)。

答案 8 :(得分:0)

为了保持控件居中,即使窗体或父控件被调整大小。

  1. 设置父元素的以下属性(可以通过属性窗口设置):
    parentControl.AutoSize = true;
    parentControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 
  1. 将此代码放在窗体或父控件的 Resize 事件中(如果控件在另一个控件内)
    controlToCenter.Left = (parentControl.Width- controlToCenter.Width) / 2;
    controlToCenter.Top = (parentControl.Height - controlToCenter.Height) / 2;
  1. 如果父控件停靠在窗体上,请添加这行代码。
       //adjust this based on the layout of your form
       parentControl.Height = this.ClientSize.Height; 

答案 9 :(得分:-1)

此外,如果您想将其与其他控件的中心对齐:

//The "ctrlParent" is the one on which you want to align "ctrlToCenter".
//"ctrlParent" can be your "form name" or any other control such as "grid name" and etc.
ctrlToCenter.Parent = ctrlParent;

ctrlToCenter.Left = (ctrlToCenter.Parent.Width - ctrlToCenter.Width) / 2;
ctrlToCenter.Top = (ctrlToCenter.Parent.Height - ctrlToCenter.Height) / 2;