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

时间:2014-12-22 23:14:42

标签: vb.net width measure text-rendering

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

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

无论我尝试多少,标签都不会显得居中(标签的左侧和右侧看起来大小不同)。

无论使用哪种字体,还有其他方法可以测量文字吗?谢谢。

2 个答案:

答案 0 :(得分:14)

将标签的Autosize属性设置为False,然后将Dock设置为标签顶部,底部或填充,或将其拖动到表单的整个宽度并将Anchor设置为左右两边。然后将TextAlign设置为MiddleCenter。

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

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

所以:让控件为你完成工作。

enter image description here

答案 1 :(得分:2)

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

横向居中:

 myLabel.Left = (myLabel.Parent.Width \2) - (myLabel.Width \2)

垂直居中:

myLabel.Top = (myLabel.Parent.Height \ 2) - (myLabel.Height \ 2)

myLabel.[SizeChanged][1]事件处理程序及其父SizeChanged事件处理程序

上添加此代码

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