在WinForms中,我使用Label来显示不同的消息,如成功、失败等。我想把标签放在中间。我需要一个解决方案,无论标签中只有一个单词还是整个句子,它都能保持居中。
WinForms
Label
bn31dyow1#
将Label的AutoSize属性设置为False,将TextAlign属性设置为MiddleCenter,将Dock属性设置为Fill。
AutoSize
False
TextAlign
MiddleCenter
Dock
Fill
vc6uscn92#
您将通过设置属性锚来实现它:没有。
oknwwptz3#
以编程方式设置的一些次要附加内容:
Label textLabel = new Label() { AutoSize = false, TextAlign = ContentAlignment.MiddleCenter, Dock = DockStyle.None, Left = 10, Width = myDialog.Width - 10 };
Dockstyle和Content alignment可能会根据您的需要而有所不同。例如,对于wpf表单上的简单标签,我使用DockStyle.None。
1tuwyuhd4#
如果您不想将标签停靠在整个可用区域中,只需设置SizeChanged事件而不是TextChanged。当autosize属性设置为True时,更改每个字母将更改标签的width属性及其文本。因此,顺便说一句,您可以使用任何公式使标签在窗体中居中。
private void lblReport_SizeChanged(object sender, EventArgs e) { lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2; }
cs7cruho5#
这个公认的答案对我不起作用,原因有二:1.我设置了BackColor,因此设置AutoSize = false和Dock = Fill会导致背景色填充整个表单1.我不能将AutoSize设置为false,因为我的标签文本是动态的相反,我只是使用表单的宽度和标签的宽度来计算左偏移:
BackColor
AutoSize = false
Dock = Fill
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
m1m5dgzv6#
我想做一些类似的事情,但是在一个带有背景图像的表单上,我发现当标签中的文本更改时,使用此方法重画很明显,所以我做了以下操作:* 将标签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属性设置为这个返回值,这样可以确保当文本发生变化时标签始终位于表单的中心,并且全屏表单的重绘不会很明显。
eni9jsuy7#
您可以尝试以下代码片段:
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; }
这是真正的中心
fivyi3re8#
“this.”是您所在的窗体,lblName是您希望居中的项。另外,“offsetInt”允许您将标签定位在中心的左侧或右侧。lblName.Location.Y保持窗体上现有的Y高度。
lblName.Location = new Point((int)((this.Width - lblName.Width) / 2) +/- offsetInt, lblName.Location.Y);
8条答案
按热度按时间bn31dyow1#
将
Label
的AutoSize
属性设置为False
,将TextAlign
属性设置为MiddleCenter
,将Dock
属性设置为Fill
。vc6uscn92#
您将通过设置属性锚来实现它:没有。
oknwwptz3#
以编程方式设置的一些次要附加内容:
Dockstyle和Content alignment可能会根据您的需要而有所不同。例如,对于wpf表单上的简单标签,我使用DockStyle.None。
1tuwyuhd4#
如果您不想将标签停靠在整个可用区域中,只需设置SizeChanged事件而不是TextChanged。当autosize属性设置为True时,更改每个字母将更改标签的width属性及其文本。因此,顺便说一句,您可以使用任何公式使标签在窗体中居中。
cs7cruho5#
这个公认的答案对我不起作用,原因有二:
1.我设置了
BackColor
,因此设置AutoSize = false
和Dock = Fill
会导致背景色填充整个表单1.我不能将
AutoSize
设置为false,因为我的标签文本是动态的相反,我只是使用表单的宽度和标签的宽度来计算左偏移:
m1m5dgzv6#
我想做一些类似的事情,但是在一个带有背景图像的表单上,我发现当标签中的文本更改时,使用此方法重画很明显,所以我做了以下操作:* 将标签AutoSize设置为true,并将TextAlign设置为MiddleCenter
然后,每次文本发生变化(我的是使用计时器完成的),我调用以下方法:
并将标签的Location属性设置为这个返回值,这样可以确保当文本发生变化时标签始终位于表单的中心,并且全屏表单的重绘不会很明显。
eni9jsuy7#
您可以尝试以下代码片段:
这是真正的中心
fivyi3re8#
“this.”是您所在的窗体,lblName是您希望居中的项。另外,“offsetInt”允许您将标签定位在中心的左侧或右侧。lblName.Location.Y保持窗体上现有的Y高度。