在WinForms
我使用Label
来显示不同的消息,例如成功,失败等。
我想将中心标签置于中心位置。我想要一个能让它保持中心的解决方案,无论标签中只有一个单词还是整个句子。
答案 0 :(得分:233)
将Label
的{{1}}属性设置为AutoSize
,将False
属性设置为TextAlign
,将MiddleCenter
属性设置为Dock
。
答案 1 :(得分:13)
您将通过设置属性Anchor:None来实现它。
答案 2 :(得分:12)
以编程方式设置的一些小的附加内容:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Dockstyle和内容对齐可能与您的需求不同。例如,对于wpf表单上的简单标签,我使用DockStyle.None。
答案 3 :(得分:7)
如果您不想在整个可用区域中停靠标签,只需设置SizeChanged事件而不是TextChanged。当autosize属性设置为True时,更改每个字母将更改标签的宽度属性及其文本。因此,顺便说一句,你可以使用任何公式来保持标签的中心形式。
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
答案 4 :(得分:2)
接受的答案对我不起作用有两个原因:
BackColor
,因此设置AutoSize = false
和Dock = Fill
会使背景颜色填充整个表单AutoSize
设置为false 相反,我只是使用表单的宽度和标签的宽度来计算左偏移量:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
答案 5 :(得分:1)
您可以尝试以下代码段:
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;
}
这真的是中心
答案 6 :(得分:0)
我想做类似的事情,但是在带有背景图像的表单上,我发现当标签中的文本更改时,使用此方法可以明显地重绘,因此我执行以下操作: *将标签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);
}
和标签的位置属性设置为这个返回值。这样可以确保在文本更改时标签始终位于表单的中心,并且全屏表单的重新绘制不明显。