#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ウィンドウの大きさによって、必ずしも中央配置になりません。 そのようなとき、ボタン類はすべてサブフォーム側に配置し、そのサブフォームをメインフォーム上で自動的に中央配置されるようにすれば、見かけ上ボタン類がすべて中央に表示されるようになります。 (左右方向だけ中央配置した例) |
|||||
|
Copyright © T'sWare All rights reserved |