古いシステムではうまく動作するWinFormsアプリケーションがありますが、4kモニターで見栄えが良くなりません。複数の問題があり、そのテーマにはたくさん書かれていますが、この質問は特定の問題に焦点を当てています。私は同じフォントを使用するために異なるコントロールを設定することができますが、高いDPIシステムではコントロールが大きく異なって見えます。これをどうすれば解決できますか?高解像度のDPIモニタでは、同じフォントが同じに見えない
明らかに、私はフォントサイズを変更したり、コントロールを動かしたりすることができます。しかし、Windowsはフォントサイズに不思議な要素を追加しています。 Windowsが何をしているのかわからなければ、元に戻すのは難しいです!古いシステムで
は私のテストウィンドウが完璧に見える:私は「
:
高DPIシステムでは、いくつかのコントロールが他とは異なるフォントサイズを持っていますフォームから継承するのではなく、いくつかのコントロールで手動でフォントを設定するなど、いくつかのことを試してみました。これを含め修正するために、私はいくつかのことを試してみた、インターネットを検索した後
:あなたが見ることができるように、フォントを変更しても問題が解決しなかった
- PROCESS_DPI_UNAWAREの間でアプリケーションを変更し、 PROCESS_SYSTEM_DPI_AWARE、PROCESS_PER_MONITOR_DPI_AWARE
- フォームのフォントを使用するのではなく、changing the fontを明示的に使用します。
- 古いシステムと高DPIシステムのビルディングのビルド。
- 同じコンピュータ上の192 DPI/200%に設定されたモニタで96 DPI/100%に設定されたモニタにビルドします。
- ビジュアルスタジオのデザイナーでフォームをビルドすることと、それを純粋なC#コードでビルドすること。
- .NET 4.0
- 4.6.1純対のVisual Studio 2010のVisual StudioのVS 2015
私は私の問題を修正し、一つのことを発見しました。残念なことに、私はターゲットマシン上でそれを実行しなければなりませんでした。だから実用的な解決策ではありません。詳細については、「繰り返す手順」の2番目の項目を参照してください。繰り返す
ステップ:
- これは、フォームの多くのコントロールの多くで発生します。小さくてシンプルなデモについては、下のコードサンプルを参照してください。それが上のスクリーンショットを手に入れた方法です。
この問題は、1つのシステム設定で表示または消滅させることができます。メインモニタを96 DPI/100%スケーリングに変更した場合、を再起動し、を再起動すると、すべてのフォントが要求通りに良好な結果が得られます。メインモニタを別のDPI設定()に変更してからを再起動すると、不正な結果が表示されます。
private void newFormButton_Click(object sender, EventArgs e) { Font copyOfFont = new Font(Font, FontStyle.Strikeout); Form form = new Form(); form.Font = Font; string sample = "Abc 123 :)"; int padding = 6; Label label = new Label(); label.Text = sample; label.Top = padding; label.Left = padding; label.Font = copyOfFont; label.Parent = form; Button button = new Button(); button.Text = sample; button.Top = label.Bottom + padding; button.Left = padding; button.Width = label.Width + padding * 2; button.Height = label.Height + padding * 2; button.Parent = form; TextBox textBox = new TextBox(); textBox.Text = sample; textBox.Size = button.Size; textBox.Top = button.Bottom + padding; textBox.Left = padding; textBox.Parent = form; ListBox listBox = new ListBox(); listBox.Items.Add(sample); listBox.Items.Add(sample); listBox.Width = button.Width; listBox.Height = button.Height * 2; listBox.Top = textBox.Bottom + padding; listBox.Left = padding; listBox.Font = copyOfFont; listBox.Parent = form; form.Show(); }
テキストボックスのフォントサイズがHiDPIの例のラベルと異なるのは、あなたですか? – kristianp
はい、テキストボックスとリストボックスは1つのフォントサイズを持ち、ボタンとラベルのフォントサイズは異なります。それらはすべて同じサイズでなければなりません。 –