web-dev-qa-db-ja.com

任意のフォームVB.NETの中央にラベルを配置します

中央にラベルが付いたフォームを表示する必要があります(フォームの幅とラベルのテキスト、幅、フォントファミリー、フォントサイズに応じて)。これはこれまでの私の試みです:

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

どれだけ試しても、ラベルが中央に表示されません(ラベルの左側と右側が同じサイズに表示されません)。

どのフォントを使用しても、テキストを測定する別の方法はありますか?ありがとうございました。

6
soulblazer

ラベルのAutosizeプロパティをFalseに設定してから、ラベルの上部、下部、または塗りつぶしをDockするか、フォームの幅全体にドラッグしてAnchorをに設定します。左と右の両方。次に、TextAlignをMiddleCenterに設定します。

Anchorプロパティは、基本的にコントロールの境界線をフォームのそれぞれの側に固定するため、かなり気の利いたものです。
したがって、この場合、コントロールの左側はフォームの左側に固定され、右側はフォームの右側に固定されます。
したがって、フォームのサイズが変更されると、コントロールの左側と右側が一緒にドラッグされます。 TextAlignとともに、これは常にテキストを中央に保ちます。
これを機能させるには、ラベルのAutoSize機能を無効にする必要があります。

別の方法は、AutoSizeを有効にして、フォームをコントロールの中央に配置してから、disable左右両方のAnchorにすることです。これにより、ラベルがどちらの側にもくっつかなくなり、相対位置が維持されるため、ラベルも中央に保持されます。

だから:コントロールにあなたのために仕事をさせてください。

enter image description here

16
Jens

より専門的なソリューションは次のとおりです。

水平方向のセンタリング:

_ 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()メソッドが呼び出される前、またはコントロールが親コントロールにアタッチされる前に、コードラインを追加しないでください。

3
VBNETcoder