#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'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved