web-dev-qa-db-ja.com

.NET(Winforms)のフォーム内でコントロールを中央揃えにしますか?

フォーム内の固定サイズコントロールを中央に配置しようとしています。

興味深いことに、これを行う非ばかげた方法はありますか?私が本当に欲しいのは、text-align cssプロパティに似たものです。

現時点では、周囲のフォームのパディングプロパティを適切なサイズに設定し、コントロールのDockプロパティをfillに設定しています。

128
user47741

anchorsを使用してこれを実現できます。または、より正確にはそれらを使用しない

デフォルトでは、コントロールはフォームの左上に固定されます。つまり、フォームのサイズが変更されても、フォームの左上からの距離は一定のままです。コントロールのアンカーを左下に変更すると、フォームのサイズが変更されても、コントロールはフォームの下部と左側から同じ距離を保ちます。

ある方向でアンカーをオフにすると、サイズ変更時にコントロールがその方向の中央に保持されます。

注: VS2015のプロパティウィンドウでアンカーをオフにするには、None、None(デフォルトのTop、Leftの代わりに)の入力が必要になる場合があります

242
splattne
myControl.Left = (this.ClientSize.Width - myControl.Width) / 2 ;
myControl.Top = (this.ClientSize.Height - myControl.Height) / 2;
107
Mitch Wheat

フォームのサイズを変更できるかどうかを述べていないため、サイズ変更を気にしない場合は簡単な方法があります(気にする場合は、Mitch Wheatsソリューションを使用してください)。

コントロールを選択->形式(メニューオプション)->ウィンドウの中央->水平または垂直

41
Robert MacLean

これを実現する素晴らしい方法を見つけました。複数のコントロールで機能します。 3列のTableLayoutを追加します。中央の列を絶対サイズにします(ただし、必要なスペースはどれくらいにしますか)。 2つの外側の列を100%に設定します。パネルを中央の列に追加し、必要なコントロールを追加して、必要な場所に配置します。その中央パネルはフォームの中央に残ります。

8
Chad

ボタンを他のコンテナのパネルoの中央に配置するには、次の手順に従います。

  1. 設計時に位置を設定します
  2. ボタンのプロパティAnchorに移動し、この値を次の画像として設定します

enter image description here

6
daniele3004

中央に配置するコントロールをパネル内に配置し、左右のパディング値をデフォルトより大きい値に設定できます。それらが等しく、コントロールがパネルの両側に固定されている限り、そのパネルの中央に表示されます。次に、必要に応じてコンテナパネルをその親に固定できます。

2
Droj

すべてのコントロールをパネルに配置してから、パネルをフォームの中央に移動するコードを記述できます。

panelMain.Location = 
    new Point(ClientSize.Width / 2 - panelMain.Size.Width / 2, 
              ClientSize.Height / 2 - panelMain.Size.Height / 2);

panelMain.Anchor = AnchorStyles.None;
1
Ahad aghapour

さらに、別のコントロールの中心に揃えたい場合:

//The "ctrlParent" is the one on which you want to align "ctrlToCenter".
//"ctrlParent" can be your "form name" or any other control such as "grid name" and etc.
ctrlToCenter.Parent = ctrlParent;

ctrlToCenter.Left = (ctrlToCenter.Parent.Width - ctrlToCenter.Width) / 2;
ctrlToCenter.Top = (ctrlToCenter.Parent.Height - ctrlToCenter.Height) / 2;
0
M. Fawad Surosh

それには目を光らせます(電卓を取り出して計算できると思います)が、フォームに上記のコントロールを挿入し、アンカーをすべて削除します(アンカー=なし)。

0
t3rse