在WinForms
我使用 aLabel
来显示不同的消息,如成功、失败等。
我想将该标签放在中心表单的中心。我想要一个解决方案,无论标签中只有一个单词还是整个句子,都能让它居中。
SetLabel
的AutoSize
属性为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 和内容对齐方式可能与您的需要不同。例如,对于 wpf 表单上的简单标签,我使用 DockStyle.None。
如果您不想在整个可用区域停靠标签,只需设置 SizeChanged 事件而不是 TextChanged。当 autosize 属性设置为 True 时,更改每个字母将更改标签的宽度属性及其文本。因此,顺便说一句,您可以使用任何公式来保持标签在表格中居中。
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
接受的答案对我不起作用,原因有两个:
BackColor
设置了这样的设置AutoSize = false
并Dock = Fill
导致背景颜色填充整个表单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;
}
它真的是中心
我想做类似的事情,但是在带有背景图像的表单上,我发现当标签中的文本更改时,使用这种方法重绘很明显,所以我做了以下操作: * 将标签 AutoSize 设置为 true 并将 TextAlign 设置为中间中心
然后,每次文本更改(我的使用计时器完成)时,我都会调用以下方法:
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 属性设置为此返回值。这确保了当文本更改时标签始终位于表单的中心,并且全屏表单的重绘不明显。