#368 コントロール幅を常にウィンドウサイズに合わせるには? フォーム、VBA

Accessのフォームビューでは、ウィンドウサイズを変更してもそれに追随してコントロールの大きさが変わることはありません。またプロパティ等でそのような設定をすることもできません。
そこで、フォームの「Resizeイベント」が発生するタイミングで、各コントロールのサイズをVBAで変更することで、あたかもフォームのウィンドウサイズの変化に合わせてコントロールサイズが自動的に変わるようなインターフェースを作ることができます。

それにはまず、次のようなプロシージャを作成してきます。あえてプロシージャ化する必要はありませんが、こうすることでさまざまなフォームやコントロールに汎用的に対応できます。
またこの例では、指定したフォームのウィンドウ幅にフィットするようにコントロールの幅を変更しています。つまり、常にウィンドウ幅いっぱいにコントロール幅が調節されるようになっています。コントロールの左位置等は変更していないので、初期のデザイン状態ではコントロールがフォームの左端にあることを前提にしています。

Public Sub AdjustWidth(frm As Form, ctl As Control)
'概要 指定コントロールをウィンドウ幅に合わせる
'引数 frm : フォームオブジェクト
'     ctl : 対象とするコントロールオブジェクト

  ctl.Width = frm.InsideWidth

End Sub


上記プロシージャの利用例です。フォームのモジュールにおいて、サイズ変更時/Resizeイベントプロシージャに次のようなコードを記述します。ここでは、"lblTitle"という名前のラベルコントロール、"linHeader"および""という名前の直線コントロールの幅をフォーム幅に合わせて調節しています。

Private Sub Form_Resize()
'フォームのサイズ変更時

  AdjustWidth Me, Me!lblTitle
  AdjustWidth Me, Me!linHeader
  AdjustWidth Me, Me!linFooter

End Sub


実行結果
開いた直後のフォーム

ウィンドウを広くしたとき

ウィンドウを狭くしたとき※サンプルフォームのラベルの文字配置は"均等割り付け"にしてあります。
| Index | Prev | Next |



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