如何在 WinForms 中保持标签居中?

WinForms中,我使用 Label来显示不同的信息,比如成功、失败等等。

我想把标签放在中间的表格上。我需要一个解决方案,无论标签中只有一个单词还是一个完整的句子,都要保持中心。

172158 次浏览

LabelAutoSize属性设置为 False,将 TextAlign属性设置为 MiddleCenter,将 Dock属性设置为 Fill

你可以通过设置属性 Anchor: None 来实现。

一些用于以编程方式设置的次要附加内容:

Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};

Dockstyle 和 Content 对齐方式可能与您的需求不同。例如,对于 wpf 表单上的简单标签,我使用 DockStyle。没有。

如果您不想在整个可用区域停靠标签,只需设置 SizeChanged 事件而不是 TextChanged。当 autosize 属性设置为 True 时,更改每个字母将更改 label 的 width 属性及其文本。所以,顺便说一下,你可以使用任何公式来保持标签的形式居中。

private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}

我想做一些类似的事情,但是在一个有背景图片的表单上,我发现当标签中的文本改变时,用这种方法重新绘制图片是显而易见的,所以我做了以下事情: * 将标签 AutoSize 设置为 true,TextAlign 设置为 MiddleCenter

然后,每当文本发生变化(我的文本是用计时器完成的) ,我就调用以下方法:

    private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}

并将标签的 Location 属性设置为此返回值。这样可以确保当文本发生更改时,标签始终位于表单的中心,并且全屏表单的重新绘制不明显。

这个被接受的答案对我不起作用,原因有两个:

  1. 我设置了 BackColor,所以设置 AutoSize = falseDock = Fill导致背景颜色填充整个形式
  2. 我不能让 AutoSize设置为 false,因为我的标签文本是动态的

相反,我只是使用表单的宽度和标签的宽度来计算左偏移量:

MyLabel.Left = (this.Width - MyLabel.Width) / 2;

您可以尝试下面的代码片段:

private Point CenterOfMenuPanel<T>(T control, int height=0) where T:Control {
Point center = new Point(
MenuPanel.Size.Width / 2 - control.Width * 2,
height != 0 ? height : MenuPanel.Size.Height / 2 - control.Height / 2);


return center;
}

这是真正的中心

enter image description here