フォーム内の固定サイズコントロールを中央に配置しようとしています。
興味深いことに、これを行う非ばかげた方法はありますか?私が本当に欲しいのは、text-align cssプロパティに似たものです。
現時点では、周囲のフォームのパディングプロパティを適切なサイズに設定し、コントロールのDockプロパティをfillに設定しています。
anchorsを使用してこれを実現できます。または、より正確にはそれらを使用しない。
デフォルトでは、コントロールはフォームの左上に固定されます。つまり、フォームのサイズが変更されても、フォームの左上からの距離は一定のままです。コントロールのアンカーを左下に変更すると、フォームのサイズが変更されても、コントロールはフォームの下部と左側から同じ距離を保ちます。
ある方向でアンカーをオフにすると、サイズ変更時にコントロールがその方向の中央に保持されます。
注: VS2015のプロパティウィンドウでアンカーをオフにするには、None、None(デフォルトのTop、Leftの代わりに)の入力が必要になる場合があります
myControl.Left = (this.ClientSize.Width - myControl.Width) / 2 ;
myControl.Top = (this.ClientSize.Height - myControl.Height) / 2;
フォームのサイズを変更できるかどうかを述べていないため、サイズ変更を気にしない場合は簡単な方法があります(気にする場合は、Mitch Wheatsソリューションを使用してください)。
コントロールを選択->形式(メニューオプション)->ウィンドウの中央->水平または垂直
これを実現する素晴らしい方法を見つけました。複数のコントロールで機能します。 3列のTableLayoutを追加します。中央の列を絶対サイズにします(ただし、必要なスペースはどれくらいにしますか)。 2つの外側の列を100%に設定します。パネルを中央の列に追加し、必要なコントロールを追加して、必要な場所に配置します。その中央パネルはフォームの中央に残ります。
中央に配置するコントロールをパネル内に配置し、左右のパディング値をデフォルトより大きい値に設定できます。それらが等しく、コントロールがパネルの両側に固定されている限り、そのパネルの中央に表示されます。次に、必要に応じてコンテナパネルをその親に固定できます。
すべてのコントロールをパネルに配置してから、パネルをフォームの中央に移動するコードを記述できます。
panelMain.Location =
new Point(ClientSize.Width / 2 - panelMain.Size.Width / 2,
ClientSize.Height / 2 - panelMain.Size.Height / 2);
panelMain.Anchor = AnchorStyles.None;
さらに、別のコントロールの中心に揃えたい場合:
//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;
それには目を光らせます(電卓を取り出して計算できると思います)が、フォームに上記のコントロールを挿入し、アンカーをすべて削除します(アンカー=なし)。