Form 設定時のサイズを取得できる関数はありますか?

タグの編集
投稿者 hori  (社会人) 投稿日時 2021/9/24 12:33:59
Full HD の画面サイズ用に書いた Formアプリ を 
FWXGA などそれより小さい画面に縮小表示したいのですが
例えば、1800x1000 で書いた Form を 1200x800 の画面に表示させて
Me.Width Me.Height を拾うと各々、1200, 800 になってしまいます。

自分で設定した数値なので、1800、1000、と
プログラムに書き込むことで済ませられますが
Form 毎に書き込むのは結構面倒なので、
そんな関数があればなぁと思った次第です。

ご存知の方、居られましたらご教示ください。
よろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/9/24 15:38:34
Form の AutoScroll プロパティを True にしておくのはどうでしょうか。

フォームサイズを狭くした場合、入りきれなくなった部分をスクロール表示できます。
ブラウザーで表示する Web サイトのように。手抜きですが。


> Me.Width Me.Height を拾うと各々、1200, 800 になってしまいます。
フォームデザイン時には、Size プロパティのWidth や Heighを重視するかと思いますが、
実際に Form1.Desiginer.vb に出力される時には ClientSize プロパティとして設定されます。
Size はフォームのタイトルバーや枠線を含む外側のサイズですが、タイトルバーなどのサイズは
OS 設定によって変化することがあるため、本来必要な内側のサイズ (ClientSize) が記録されます。


> FWXGA などそれより小さい画面に縮小表示したいのですが
AutoScroll を使わない場合は、
 ① あらかじめ、想定しうる最小サイズで画面を設計しておく
 ② 実行環境に合わせて、動的にフォームサイズを決定するような設計にする
などの選択肢があります。後から対応するのは手間がかかりますけれども。
また、各コントロールの Anchor プロパティや Dock プロパティを適切に設定しておけば、
フォームサイズが変化した時に、中のコントロールサイズを動的に変化させることもできます。


> Full HD の画面サイズ用に書いた Formアプリ を 
> FWXGA などそれより小さい画面に縮小表示したいのですが
昨今では物理解像度だけではなく、論理解像度も考慮した方が良いかもしれません。
DPI 設定が 100% より大きな値に設定されている環境の場合、ドットバイドットにならないので。

また、.NET Framework バージョンによって、高 DPI 環境への対応度合いが異なるため、
どの .NET Framework バージョンを使うのかも明らかにした方が良いですね。


①フォームデザイン時には、StartPosition プロパティも確認しておきましょう。
 この値が WindowsDefaultBounds に設定されている場合、フォームサイズは
 デザイン時に指定したサイズではなく、実行環境依存のファイルになります。
 StartPosition は、Location をデザイン時に定める場合にも重要です。

②高 DPI 環境の場合、Form にある AutoScaleMode プロパティの影響を受けます。
 この設定が None 以外になっている場合、DPI が異なる環境で
 実行した場合、フォームのサイズが実行環境にあわせて調整されます。
 AutoScaleMode の既定値は Font です。

③AutoScaleMode が Font になっている場合、デザイン時の Font プロパティも
 設定しておいた方が無難です。Font が未設定の場合、既定のフォントが使われますが、
 デザイン時のフォームサイズが、デザイン時に保持された AutoScaleDimensions プロパティの
 設定に依存して変化します。
投稿者 hori  (社会人) 投稿日時 2021/9/24 16:36:19
魔界の仮面弁士さま。ご返答ありがとうございます。

「ClientSize プロパティ」と云うヒントをいただきまして
いろいろ試してみましたところ
Form を呼び出す前に、f.ClientSize.Width 等で必要な値が得られました。
仰られる通り、枠の分を差し引いた値のようで、僕にとってはかえって好都合でした。

ありがとうございました。