固定サイズのコントロールをフォームの中央に配置しようとしています。
興味があるので、これを行う非ばかげた方法はありますか? 私が本当に欲しいのは、text-align css プロパティに似たものです。
現在、周囲のフォームの padding プロパティを適切なサイズに設定し、コントロールの Dock プロパティを fill に設定しています。
固定サイズのコントロールをフォームの中央に配置しようとしています。
興味があるので、これを行う非ばかげた方法はありますか? 私が本当に欲しいのは、text-align css プロパティに似たものです。
現在、周囲のフォームの padding プロパティを適切なサイズに設定し、コントロールの Dock プロパティを fill に設定しています。
これは、アンカーを使用して実現できます。より正確には、それらの不使用。
コントロールはデフォルトでフォームの左上に固定されています。つまり、フォームのサイズが変更されても、フォームの左上からの距離は一定のままです。コントロール アンカーを左下に変更すると、フォームのサイズが変更されたときに、コントロールはフォームの下辺と左辺から同じ距離を保ちます。
ある方向のアンカーをオフにすると、コントロールが既に中央に配置されている場合、サイズ変更時に中央に配置されたままになります。一般に、固定されていないコントロールは、ダイアログに対する比例位置を維持します。たとえば、コントロールをダイアログ幅の X=75% に配置し、左右のアンカーをオフにすると、コントロールはその中心をダイアログ幅の X=75% に維持します。
注: VS2015 のプロパティ ウィンドウでアンカーをオフにするには、[なし] と入力する必要がある場合があります (デフォルトの [上、左] ではなく)。
myControl.Left = (this.ClientSize.Width - myControl.Width) / 2 ;
myControl.Top = (this.ClientSize.Height - myControl.Height) / 2;
フォームのサイズを変更できるかどうかは明記されていないため、サイズ変更を気にしない場合は簡単な方法があります(気にする場合は、Mitch Wheatsソリューションを使用してください)。
コントロール->フォーマット(メニューオプション)->ウィンドウの中央->水平または垂直を選択します
I found a great way to do this and it will work with multiple controls. Add a TableLayout with 3 columns. Make the center column an absolute size (however much room you need). Set the two outside columns to 100%. Add a Panel to the center column and add any controls you need and place them where you want. That center panel will now remain centered in your form.
中央に配置するコントロールを Panel 内に配置し、左右のパディング値をデフォルトよりも大きい値に設定できます。それらが等しく、コントロールがパネルの両側に固定されている限り、コントロールはそのパネルの中央に表示されます。その後、必要に応じて、コンテナー パネルをその親に固定できます。
それには目を見張る必要があります(電卓を取り出して計算できると思います)が、フォームに上記のコントロールを挿入してから、アンカーを削除します(アンカー=なし)。
フォームまたは親コントロールのサイズが変更された場合でも、コントロールを中央に配置する。
parentControl.AutoSize = true;
parentControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
controlToCenter.Left = (parentControl.Width- controlToCenter.Width) / 2;
controlToCenter.Top = (parentControl.Height - controlToCenter.Height) / 2;
//adjust this based on the layout of your form
parentControl.Height = this.ClientSize.Height;