フォームを開いたとき、それを自動的に画面の中央(正確にはAccessウィンドウの中央)に表示させるには、フォームの「自動中央寄せ」プロパティを"はい"に設定するだけです。
また、フォームを開いたときあるいはフォームのウィンドウサイズを変更したとき、それに合わせてコントロールを大きくしたり小さくしたりするには、コントロールの「水平アンカー」や「垂直アンカー」プロパティを設定するだけで、自動的にそれを実行させることができます。
それに対して、フォームのウィンドウサイズに応じて、あるコントロールを、そのサイズを変えずに、常に画面中央に自動配置させるためには、プログラムでの制御が必要になります。コントロールには「自動中央寄せ」プロパティはありませんし、「アンカー」プロパティではコントロールの幅や高さも変わってしまいます。
次の例では、フォームサイズが変わったときに、サブフォームコントロール「仕入先_sub」が常にフォーム中央に配置されるようにしています。
考え方としては、たとえば水平方向については、フォーム全体の幅からサブフォームの幅をマイナスすることで、サブフォーム左右の余白の合計を計算します。それを2で割ることによって左右それぞれの余白値を取得するとともに、それらは同じ値になるので、それをサブフォームの「左位置/Left」プロパティに設定することで中央配置されることになります。
コード例:
Private Sub Form_Resize()
'フォームのサイズ変更時
With Me!仕入先_sub
'サブフォームの水平方向を画面中央に移動
.Left = (Me.InsideWidth - .Width) \ 2
'サブフォームの垂直方向を画面中央に移動
.Top = (Me.InsideHeight - .Height) \ 2
End With
End Sub
実行例:
●上記プログラムを使わない場合 → フォームサイズを変えてもコントロールの位置は変わらない


●上記プログラムを使った場合 → フォームサイズを変えるとコントロールの位置も変わる



この方法の利用例のひとつとして、フォームやレポートを起動するためのボタンがたくさん並んだメインメニュー画面での利用が考えられます。
Accessのオプション設定で「ウィンドウを重ねて表示する」になっている場合には、フォーム自体を自動中央寄せにすれば特に問題ありませんが、「タブ付きドキュメント」になっている場合には、デザイン上でいくらボタン類を中央に配置しても、実際に使われるディスプレイ解像度やAccessウィンドウの大きさによって、必ずしも中央配置になりません。
そのようなとき、ボタン類はすべてサブフォーム側に配置し、そのサブフォームをメインフォーム上で自動的に中央配置されるようにすれば、見かけ上ボタン類がすべて中央に表示されるようになります。
(左右方向だけ中央配置した例)
|