web-dev-qa-db-ja.com

WinFormsでラベルを中央に配置するにはどうすればよいですか?

WinFormsでは、Labelを使用して、成功、失敗などのさまざまなメッセージを表示しています。

そのラベルを中央のフォームの中央に配置したいと思います。ラベルにWordが1つしかない場合でも、文全体が含まれる場合でも、中心に保つソリューションが必要です。

126
haansi

LabelAutoSizeプロパティをFalseに、TextAlignプロパティをMiddleCenterに、DockプロパティをFillに設定します。

243
decyclone

プロパティAnchor:Noneを設定して、これを達成します。

13

プログラムで設定するためのいくつかのマイナーな追加コンテンツ:

Label textLabel = new Label() { 
        AutoSize = false, 
        TextAlign = ContentAlignment.MiddleCenter, 
        Dock = DockStyle.None, 
        Left = 10, 
        Width = myDialog.Width - 10
};            

ドックスタイルとコンテンツの配置は、ニーズと異なる場合があります。たとえば、wpfフォームの単純なラベルには、DockStyle.Noneを使用します。

12
user3866622

使用可能な領域全体にラベルをドッキングしたくない場合は、TextChangedの代わりにSizeChangedイベントを設定するだけです。 autosizeプロパティがTrueに設定されている場合、各文字を変更すると、ラベルの幅プロパティとそのテキストが変更されます。そのため、任意の数式を使用して、ラベルをフォームの中央に保つことができます。

private void lblReport_SizeChanged(object sender, EventArgs e)
{
    lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
8
Umut OVECOGLU

私は似たようなことをしたかったのですが、背景画像のあるフォームで、ラベルのテキストが変更されたときにこのメソッドで再描画が明らかであることがわかったので、次のことを行いました:ミドルセンター

その後、テキストが変更されるたびに(私のものはタイマーを使用して行われました)、次のメソッドを呼び出しました。

    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プロパティをこの戻り値に設定します。これにより、テキストが変更されたときにラベルが常にフォームの中心になり、フルスクリーンフォームの再描画が明確にならないようになりました。

0
LordPupazz

受け入れられた答えは、次の2つの理由でうまくいきませんでした。

  1. BackColorが設定されていたので、AutoSize = falseおよびDock = Fillを設定すると、背景色がフォーム全体に表示されます
  2. ラベルテキストが動的だったため、AutoSizeをfalseに設定することはできませんでした

代わりに、フォームの幅とラベルの幅を使用して、左オフセットを計算しました。

MyLabel.Left = (this.Width - MyLabel.Width) / 2;
0
TheIronCheek