#554 コントロールを画面中央に自動配置させるには? フォーム、VBA

フォームを開いたとき、それを自動的に画面の中央(正確には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ウィンドウの大きさによって、必ずしも中央配置になりません。

そのようなとき、ボタン類はすべてサブフォーム側に配置し、そのサブフォームをメインフォーム上で自動的に中央配置されるようにすれば、見かけ上ボタン類がすべて中央に表示されるようになります。

(左右方向だけ中央配置した例)
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved