北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

【VB.NET】 フォームサイズに応じて、コントロールの位置・サイズを動的に変える

2017-02-24 15:16:20 | VB.NET
MSDN フォーラムでこんな質問がありました。

  ユーザーが使うモニターの解像度に応じてウィンドウ(フォーム)のサイズを変えたい・・・
  Form size and screen size

  モニター解像度に応じてウィンドウのサイズを変えること自体は簡単なのですが・・・

  ウィンドウのサイズが変わっても、その中にあるボタン、テキストボックスなどがそのままだとちょっとウレシクない。
  枠だけが変わり、中身の大きさや位置は変わらないのですから・・・

なのでサンプルを作りました。

  あまり多くはないのですが、
  ウィンドウのサイズを変えたらそれに応じて中のボタンや文字の配置・サイズを変えたいことがあります。

  ウィンドウの大きさにコントロールが追随する・・・そんな感じです。

  

主なコードはこんな具合。
(表示の関係で先頭のスペースは全角にしています)

▼▼ == ここから =========================================
' --- 変数宣言
Private originalSize As Size ' -- コントロール・スケーリング用オリジナルサイズ

' ---●●フォームサイズが変わった(コントロールのスケーリング、フォームサイズの表示)
Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) _
           Handles MyBase.SizeChanged
  Me.SuspendLayout()
  ' --- フォーム上のコントロールのサイズと位置を調整
  If Not (Me.WindowState = FormWindowState.Minimized) Then
    ' --- サイズファクターの決定
    Dim sfWidth As Single = (Me.ClientSize.Width / Me.originalSize.Width)
    Dim sfHeight As Single = (Me.ClientSize.Height / Me.originalSize.Height)
    Dim sizeFactor As New SizeF(sfWidth, sfHeight)
    ' --- 各コントロールのスケーリング
    For Each ctrl As Control In Me.Controls
      If (TypeOf ctrl Is ListBox) Then
        DirectCast(ctrl, ListBox).IntegralHeight = False
      End If
      If (TypeOf ctrl Is ComboBox) Then
        DirectCast(ctrl, ComboBox).IntegralHeight = False
      End If
      ' --- フォントのスケーリング
      Dim fntScale As Single = (ctrl.Font.Size * sizeFactor.Height)
      ctrl.Font _
          = New Font(ctrl.Font.FontFamily, fntScale, ctrl.Font.Style, ctrl.Font.Unit)
      ' --- コントロールのスケーリング
      ctrl.Scale(sizeFactor)
    Next
    ' --- オリジナルサイズに保存
    Me.originalSize = Me.ClientSize
  End If
End Sub
▲▲ == ここまで =========================================

ですが、問題が残っています。

  高 DPI モニターで、テキストなどの文字を 125%, 150% など(100% 以外)にされていると
  思ったとおりにレイアウトされません。

  合間をみて試行錯誤していますが、まだ完成に至りません。

コードはこれだけではありません。
試行錯誤中のコードもあります。

  なので、Dropbox でプロジェクト全体を共有しました。
  ファイル名は FlexForm_VB.zip (約600 KB)。

  ダウンロードはここから・・・
  https://www.dropbox.com/s/q6e24tdozyywacx/FlexForm_VB.zip?dl=0


  言語は VB です。
  お時間のある方はダウンロードしてお試しください。

  改善点、DPI 対策にお気づきの場合は、ぜひご一報ください。 

---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・


ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 戻ってきた X1-Carbon は修理... | トップ | Windows 10 [87] : Creators ... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

VB.NET」カテゴリの最新記事