DPIに対応したアプリケーションの作成
質問
C#でフォームアプリケーションを作っています。モニターのDPIを変更すると、すべてのコントロールが動きます。
私はコードを使用しました
this.AutoScaleMode = AutoScaleMode.Dpi
を使用しましたが、問題を回避することはできませんでした。
どなたか思い当たる方はいらっしゃいますか?
どのように解決するのですか?
編集: .NET 4.7 では、Windows フォームで高 DPI のサポートが改善されました。 docs.microsoft.com で詳細をご覧ください。 ただし、Win 10 Creators Update 以上でしか動作しないので、ユーザー ベースによってはまだ使用できないかもしれません。
難しいですが、不可能ではありません。最良の選択肢はもちろん WPF に移行することですが、それは実現不可能かもしれません。
私はこの問題で多くの時間を費やしてきました。ここでは、FlowLayoutPanel または TableLayoutPanel なしで正しく動作させるためのいくつかのルール/ガイドラインを紹介します。
- アプリは常にデフォルトの 96 DPI (100%) で編集/デザインしてください。120DPI (125% など) で設計すると、後で 96 DPI に戻って作業するときに、非常に具合が悪くなります。
- 私は AutoScaleMode.Font を使用して成功しましたが、AutoScaleMode.DPI はあまり試したことがありません。
- すべてのコンテナー (フォーム、パネル、タブページ、ユーザーコントロールなど) でデフォルトのフォント サイズを使用することを確認します。8,25 px です。できれば、コンテナー クラスのデフォルト フォントを使用するように、すべてのコンテナーについて .Designer.cs ファイルで設定しないようにしてください。
- すべてのコンテナ が必要です。 は同じ オートスケールモード
- すべてのコンテナで、Designer.cs ファイルに以下の行が設定されていることを確認します。
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); // for design in 96 DPI
- ラベルやテキストボックスなどに異なるフォントサイズを設定する必要がある場合、コンテナクラスでフォントを設定するのではなく、コントロールごとに設定してください。フォームとフォーム上のすべてのコンテナが同じフォントサイズを使用する場合は、動作するかもしれませんが、私はそれを試していません。
- 高い DPI 設定を持つ別のマシンまたは仮想 Windows インストール (VMware、Virtual PC、VirtualBox) を使用して、デザインをすぐにテストしてください。DEV マシン上の /bin/Debug フォルダからコンパイルされた .exe ファイルを実行するだけです。
これらのガイドラインに従えば、特定のアンカーでコントロールを配置し、フローパネルを使用しない場合でも、問題がないことを保証します。私たちは、この方法で構築されたアプリをさまざまな DPI 設定の何百台ものマシンに展開していますが、もはや苦情は一切ありません。すべてのフォーム、コンテナ、グリッド、ボタン、テキストフィールドなどのサイズは、フォントと同様に正しく拡大縮小されます。画像も動作しますが、高 DPI では少しピクセルのようになる傾向があります。
編集: このリンクには、特に AutoScaleMode.DPI を使用する場合、多くの良い情報があります。 関連する stackoverflow の質問へのリンク
関連
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Windowsフォームアプリケーションで、アプリケーションの設定を保存するにはどうすればよいですか?
-
[解決済み] DPIが高いマシン(例:150%)でアプリが正しく動作するように設定するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] 関数を終了するには?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] DPIが高いマシン(例:150%)でアプリが正しく動作するように設定するにはどうすればよいですか?