ほとんどの場合、問題の原因を誤って特定しました。フォーム レイアウトの破損の最も一般的な原因は、ビデオ アダプタの DPI 設定です。これは 1 インチあたりのピクセル数を決定し、 Windows 7 では非常に簡単に変更できます。XP でも変更できますが、変更するのが難しいだけです。設定は重要です。モニターは、特に Apple の「Retina」ディスプレイの推進により改善されています。
Program.cs の Main() メソッドを調整して、チェック コードを追加します。次のようにします。
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var main = new Form1();
using (var gr = main.CreateGraphics()) {
if (gr.DpiX != 96) {
MessageBox.Show("Sorry, didn't get this done yet. Bye");
Environment.Exit(1);
}
}
Application.Run(main);
}
もちろん、フォームのレイアウトを修正することは、長期的な解決策です。典型的な間違いは、フォームの Font プロパティまたはコンテナーの Font プロパティと一致しない独自の Font プロパティをコントロールに与えることです。XP マシンで同じ問題を引き起こす簡単な方法は、DPI 設定が何をするかをエミュレートすることです。XP で設定を見つけたり、変更したときにマシンを再起動したりする手間が省けます。このコードをフォームに貼り付けます。
protected override void OnLoad(EventArgs e) {
this.Font = new Font(this.Font.FontFamily, this.Font.SizeInPoints * 120f / 96f);
base.OnLoad(e);
}
これは、Win7 の表示設定で 125% のスケーリングを選択することと同じです。