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 プロパティの
設定に依存して変化します。
フォームサイズを狭くした場合、入りきれなくなった部分をスクロール表示できます。
ブラウザーで表示する 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 12:33:59
Full HD の画面サイズ用に書いた Formアプリ を
FWXGA などそれより小さい画面に縮小表示したいのですが
例えば、1800x1000 で書いた Form を 1200x800 の画面に表示させて
Me.Width Me.Height を拾うと各々、1200, 800 になってしまいます。
自分で設定した数値なので、1800、1000、と
プログラムに書き込むことで済ませられますが
Form 毎に書き込むのは結構面倒なので、
そんな関数があればなぁと思った次第です。
ご存知の方、居られましたらご教示ください。
よろしくお願いいたします。
FWXGA などそれより小さい画面に縮小表示したいのですが
例えば、1800x1000 で書いた Form を 1200x800 の画面に表示させて
Me.Width Me.Height を拾うと各々、1200, 800 になってしまいます。
自分で設定した数値なので、1800、1000、と
プログラムに書き込むことで済ませられますが
Form 毎に書き込むのは結構面倒なので、
そんな関数があればなぁと思った次第です。
ご存知の方、居られましたらご教示ください。
よろしくお願いいたします。
「ClientSize プロパティ」と云うヒントをいただきまして
いろいろ試してみましたところ
Form を呼び出す前に、f.ClientSize.Width 等で必要な値が得られました。
仰られる通り、枠の分を差し引いた値のようで、僕にとってはかえって好都合でした。
ありがとうございました。