我试图在一个表单中居中一个固定大小的控件。
顺便问一下,有没有一种非白痴式的方法来做到这一点?我真正想要的是类似于text-align css属性的东西。
目前,我将周围表单的padding属性设置为适当的大小,并将控件的Dock属性设置为fill。
我试图在一个表单中居中一个固定大小的控件。
顺便问一下,有没有一种非白痴式的方法来做到这一点?我真正想要的是类似于text-align css属性的东西。
目前,我将周围表单的padding属性设置为适当的大小,并将控件的Dock属性设置为fill。
您可以通过使用锚点来实现这一点。更确切地说,是不使用锚点。
控件默认情况下会被锚定在表单的左上角,这意味着当表单大小改变时,它们距离表单左上角的距离将保持不变。如果您将控件锚定到左下角,则在调整表单大小时,控件将保持与表单底部和左侧相同的距离。
关闭某个方向上的锚定将使控件在调整大小时保持居中,如果它已经居中。一般来说,未锚定的控件将保持其相对于对话框的比例位置。例如,如果您将一个控件放置在对话框宽度的X=75%处,并关闭左/右锚点,则该控件将保持其中心在对话框宽度的X=75%处。
注意:在VS2015的属性窗口中关闭锚定可能需要输入 None(而非默认的Top,Left)。
myControl.Left = (this.ClientSize.Width - myControl.Width) / 2 ;
myControl.Top = (this.ClientSize.Height - myControl.Height) / 2;
myControl.Location = new Point(this.Width / 2 - myControl.Width / 2, this.Height / 2 - myControl.Height / 2)
可以正常工作。 - Ricky Divjakovski private void Form1_SizeChanged(object sender, EventArgs e)
{
PicLoading.Left = dataGridView1.Width / 2;
PicLoading.Top = dataGridView1.Height / 2;
}
- M. Fawad Surosh鉴于您没有说明表单是否可以调整大小,如果您不关心调整大小(如果您关心,请使用Mitch Wheats的解决方案),则有一种简单的方法:
选择控件-> 格式(菜单选项)-> 在窗口中心对齐->水平或垂直
我找到了一个非常好的方法来实现这个,它适用于多个控件。添加一个TableLayout,其中包含3列。将中间列设置为绝对大小(根据需要设置大小)。将两个外部列设置为100%。在中间列添加一个面板,并添加任何所需的控件并将它们放置在所需位置。那个中心面板现在将保持在您的表单中心。
//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;
您可以将要居中的控件放在一个面板中,并将左右填充值设置为大于默认值。只要它们相等并且您的控件已经固定到面板的两侧,那么它就会居中出现在该面板中。然后,您可以根据需要将容器面板固定到其父容器上。
所以,我目前正在开发一个分页控件,并想出了以下方法来实现下面的结果。
这将使 PanelLayout 水平居中。 现在,在您的代码后台中,执行以下操作:
public MyConstructor()
{
InitializeComponent();
for (var i = 0; i<10; i++)
{
AddButton(i);
}
}
void AddButton(int i)
{
var btn = new Button();
btn.Width = 30;
btn.Height = 26;
btn.Text = i.ToString();
this.flowLayoutPanel1.Controls.Add(btn);
btn.Anchor = AnchorStyles.None;
}
然而,这里有一个警告。如果我将表单的水平大小调整得太小,按钮将会在视口之外“消失”。在我的情况下,这不是问题,但您可以编写监听调整大小事件的代码,并根据视口宽度删除元素(按钮)来解决此问题。
即使调整了表单或父控件的大小,也要保持控件居中。
parentControl.AutoSize = true;
parentControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
controlToCenter.Left = (parentControl.Width- controlToCenter.Width) / 2;
controlToCenter.Top = (parentControl.Height - controlToCenter.Height) / 2;
//adjust this based on the layout of your form
parentControl.Height = this.ClientSize.Height;
这涉及到目测(好吧,我想你可以拿出计算器来计算),但只需在表单上插入所述控件,然后删除任何锚定(anchor = None)。