WinForms
では、Label
を使用して、成功、失敗などのさまざまなメッセージを表示しています。
そのラベルを中央のフォームの中央に配置したいと思います。ラベルにWordが1つしかない場合でも、文全体が含まれる場合でも、中心に保つソリューションが必要です。
Label
のAutoSize
プロパティをFalse
に、TextAlign
プロパティをMiddleCenter
に、Dock
プロパティをFill
に設定します。
プロパティAnchor:Noneを設定して、これを達成します。
プログラムで設定するためのいくつかのマイナーな追加コンテンツ:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
ドックスタイルとコンテンツの配置は、ニーズと異なる場合があります。たとえば、wpfフォームの単純なラベルには、DockStyle.Noneを使用します。
使用可能な領域全体にラベルをドッキングしたくない場合は、TextChangedの代わりにSizeChangedイベントを設定するだけです。 autosizeプロパティがTrueに設定されている場合、各文字を変更すると、ラベルの幅プロパティとそのテキストが変更されます。そのため、任意の数式を使用して、ラベルをフォームの中央に保つことができます。
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
私は似たようなことをしたかったのですが、背景画像のあるフォームで、ラベルのテキストが変更されたときにこのメソッドで再描画が明らかであることがわかったので、次のことを行いました:ミドルセンター
その後、テキストが変更されるたびに(私のものはタイマーを使用して行われました)、次のメソッドを呼び出しました。
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プロパティをこの戻り値に設定します。これにより、テキストが変更されたときにラベルが常にフォームの中心になり、フルスクリーンフォームの再描画が明確にならないようになりました。
受け入れられた答えは、次の2つの理由でうまくいきませんでした。
BackColor
が設定されていたので、AutoSize = false
およびDock = Fill
を設定すると、背景色がフォーム全体に表示されますAutoSize
をfalseに設定することはできませんでした代わりに、フォームの幅とラベルの幅を使用して、左オフセットを計算しました。
MyLabel.Left = (this.Width - MyLabel.Width) / 2;