WinForms
私は成功、失敗などのさまざまなメッセージを表示するためにを使用してLabel
います。
そのラベルを中央のフォームの中央に配置したいと思います。ラベルに単語が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に設定されている場合に、ラベルのwidthプロパティとそのテキストが変更されます。したがって、ちなみに、任意の数式を使用して、ラベルをフォームの中央に配置することができます。
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;
同様のことをしたかったのですが、背景画像のあるフォームで、ラベルのテキストが変更されたときに、このメソッドで再描画が明白であることがわかったので、次のようにしました。*ラベルのAutoSizeをtrueに設定し、TextAlignをに設定します。 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プロパティをこの戻り値に設定します。これにより、テキストが変更されたときにラベルが常にフォームの中央に配置され、フルスクリーンフォームの再描画が明確になりませんでした。
次のコードスニペットを試すことができます。
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;
}
本当にセンターです