回答:
設定Label
のAutoSize
プロパティにFalse
、TextAlign
プロパティにMiddleCenter
及びDock
財産へFill
。
Control.Dock
プロパティ(msdn.microsoft.com/en-us/library/...)、あなたは(スティック)コンテナの特定の側面にコントロールをドッキングすることができます。たとえばLeft
、Top
、Right
またはBottom
。Fill
コンテナー内のすべての使用可能なスペースを取るようにコントロールに指示します。
Dock
設定に何もする必要はありませんでした。
Dock
設定は不要でした。AutoSize
プロパティを変更すると、手動でサイズを調整できる境界ボックスがラベルに与えられます。
プログラムで設定するためのいくつかのマイナーな追加コンテンツ:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
ドックスタイルとコンテンツの配置は、ニーズと異なる場合があります。たとえば、wpfフォームの単純なラベルには、DockStyle.Noneを使用します。
プロパティAnchor:Noneを設定してそれを実現します。
使用可能な領域全体にラベルをドッキングしたくない場合は、TextChangedの代わりにSizeChangedイベントを設定します。autosizeプロパティがTrueに設定されている場合、各文字を変更すると、ラベルの幅プロパティとそのテキストが変更されます。つまり、任意の数式を使用して、ラベルをフォームの中央に配置することができます。
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
受け入れられた回答は、次の2つの理由で機能しませんでした。
BackColor
そのように設定しAutoSize = false
、Dock = Fill
フォーム全体を背景色で塗りつぶしましたAutoSize
ラベルテキストが動的だったので、とにかくfalseに設定できなかった代わりに、フォームの幅とラベルの幅を使用して、左オフセットを計算しました。
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
私は同様のことをしたかったのですが、背景画像のあるフォームで、ラベルのテキストが変更されたときにこのメソッドで再描画が明らかであることを発見したので、次のようにしました。 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プロパティをこの戻り値に設定します。これにより、テキストが変更されたときにラベルが常にフォームの中央に配置され、フルスクリーンフォームの再描画が明確ではなくなりました。