ラベルをWinFormsの中央に配置する方法を教えてください。


137

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

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

回答:


281

設定LabelAutoSizeプロパティにFalseTextAlignプロパティにMiddleCenter及びDock財産へFill


デサイクロンのおかげで、うまくいきました。あなたはDockが何をするのかガイドすることができますか?
haan​​si

3
Control.Dockプロパティ(msdn.microsoft.com/en-us/library/...)、あなたは(スティック)コンテナの特定の側面にコントロールをドッキングすることができます。たとえばLeftTopRightまたはBottomFillコンテナー内のすべての使用可能なスペースを取るようにコントロールに指示します。
デサイクロン

1
ラベルで使用可能なスペース全体を埋める必要がない限り、プログラムソリューションでuser3866622によって提案されているように、Dockプロパティを "None"に設定できます。
Tim

3
動作しましたが、Dock設定に何もする必要はありませんでした。
ジム・フェル

4
Dock設定は不要でした。AutoSizeプロパティを変更すると、手動でサイズを調整できる境界ボックスがラベルに与えられます。
Nick Roberts

13

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

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

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



10

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

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

2

受け入れられた回答は、次の2つの理由で機能しませんでした。

  1. 私はBackColorそのように設定しAutoSize = falseDock = Fillフォーム全体を背景色で塗りつぶしました
  2. AutoSizeラベルテキストが動的だったので、とにかくfalseに設定できなかった

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

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

1

私は同様のことをしたかったのですが、背景画像のあるフォームで、ラベルのテキストが変更されたときにこのメソッドで再描画が明らかであることを発見したので、次のようにしました。 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プロパティをこの戻り値に設定します。これにより、テキストが変更されたときにラベルが常にフォームの中央に配置され、フルスクリーンフォームの再描画が明確ではなくなりました。


1

次のコードスニペットを試すことができます。

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;
}

それは本当にセンターです

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.