在任何形式的VB.NET上居中标签

sou*_*zer 6 vb.net text-rendering width measure

我需要显示一个带有居中标签的表单(根据表单的宽度和标签的文本,宽度,字体系列和字体大小).到目前为止,这是我的尝试:

(Me.Width - TextRenderer.MeasureText("Hello word", New Font("Delius", 10, 
FontStyle.Regular).Width) / 2
Run Code Online (Sandbox Code Playgroud)

无论我尝试多少,标签都不会出现应该居中的位置(标签的左右两侧看起来不一样).

无论使用哪种字体,还有其他方法来测量文本吗?谢谢.

Jen*_*ens 16

Autosize标签的属性设置为False,然后Dock将Label Top,Bottom或Fill设置为,或将其拖动到窗体的整个宽度并设置Anchor为Left和Right.然后设置TextAlign为MiddleCenter.

Anchor属性非常漂亮,因为它基本上将控件的边框固定到表单的相应侧.
因此,在我们的情况下,控件的左侧贴在窗体的左侧,右侧贴在窗体的右侧.
因此,如果调整窗体大小,它会使用它拖动控件的左侧和右侧.与TextAlign此一起,这始终使文本居中.
为此,AutoSize需要禁用标签的功能.

另一种方法是保持AutoSize启用状态,将窗体置于控件中心,然后禁用"左"和"右" Anchor.这样可以使标签保持居中,因为它现在不再粘在任何一侧,而是保持其相对位置.

所以:让控件为你工作.

在此输入图像描述

  • 别客气.我还添加了一些额外的解释. (2认同)

小智 6

这里有一个更专业的解决方案:

水平居中:

 myLabel.Left = (myLabel.Parent.Width \2) - (myLabel.Width \2)
Run Code Online (Sandbox Code Playgroud)

垂直居中:

myLabel.Top = (myLabel.Parent.Height \ 2) - (myLabel.Height \ 2)
Run Code Online (Sandbox Code Playgroud)

将此代码添加到myLabel.[SizeChanged][1]事件处理程序及其父SizeChanged事件处理程序上

InitializeComponent()ps 不要在调用方法之前或将控件附加到父控件之前添加代码行。