アプリ版:「スタンプのみでお礼する」機能のリリースについて

C# のフォームデザイン&レイアウトについて

Windowsフォームのデザインやレイアウトについて質問です。
テキストボックスやラベルを解像度の違いによって違う見え方になる為、スケールにて見え方を合わせています。
しかし、添付画像の様にレイアウトが崩れてしまいます。

解像度の違うディスプレイで、レイアウトが同様に見える様にするにはどのようにすれば良いでしょうか?
添付画像左側の様にテキストボックスやラベルを引っ付けて並べたいです。

もう長い間悩んでいます。
どなたか、きっかけやアドバイス等、ご教授よろしくお願いいたします。
また、ソースコードや参考サイトのリンク等もあれば、よろしくお願いいたします。

「C# のフォームデザイン&レイアウトにつ」の質問画像

A 回答 (1件)

最近、フォントサイズを変更するケースにほとんど遭遇してこなかったので意識していませんでしたが、過去(WIn3.1時代)に1度だけ痛い思いをしたことがあります。

その時には、苦肉の策で「Bitmap」に変更したように記憶しています。

今手元のOSで調べてみたのですが、

フォントサイズ(DPI)の変更 - VISTAまで
ディスプレイ(倍率指定) - Windows7

Windows7から方式が変わったのですね。

Windows7では、DPIではなく比率(100%,125%,150%)という単位に変わっています。
上記比率やカスタム比率でも確認しましたが、その比率に拡大されるだけでレイアウトが崩れると行ったことはありませんでした。

●なぜ、フォントサイズ(DPI)を変更するとレイアウトが崩れるのか

FormプロパティのAutoScaleModeはどのような設定になってますか?

 None-自動スケーリング無効
 Font-クラスで使用されているフォント (通常はシステムのフォント) サイズを基準にスケーリング
 Dpi-ディスプレイの解像度を基準としてスケールを制御(一般的な解像度は 96 dpi と 120 dpi)
 Inherit-クラスの親のスケーリング モードでスケール制御(親が存在しない場合は、自動スケーリング無効)

例えば、
”Font”設定にして、Formのフォントサイズを変更するとFormのサイズが変わり、子コントロールの配置もフォントも変わります。その際、計算がおかしくなる場合があって、それが原因で違和感のあるレイアウトになってしまう場合があります。

”None”に設定すると、フォントサイズを変えてもFormのサイズは変わりません。その際、子コントロールのフォントを単独で設定していない(Formのフォントを継承)と、Formで変更したフォントに切り替わります。子コントロールのロケーションは変わりませんがフォントサイズの変更に伴い、コントロール自体のサイズが大きくなったり小さくなったりします。

これを回避するには(ベストな方法ではありませんが)子コントロール毎に(Formと異なる)フォントを指定する方法です。こうしておくと、誤ってFormのフォントが変わっても、子コントロールは影響を受けません。

”Dpi”の設定は、確認できていません。

●質問の答えとしては
確認できたわけではありませんが、
Form**.AutoScaleMode=AutoScaleMode.None として試してみてください。


[プログラミングの家庭教師]
    • good
    • 0
この回答へのお礼

非常に詳しい説明ありがとうございます。

FormプロパティのAutoScaleMode
が影響していたのですね。

現在、外出先からなので、テスト出来ていませんが、
帰って早々に試させていただきます。

子コントロールだけでなく、親コントロールのスケーリングは考えていませんでした。
本当に感謝です。m(__)m
ありがとうございます。

お礼日時:2010/09/09 22:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!