Windows10で、ある日突然、Windows Formでコントロールの画面レイアウトが崩れた。
縦横に伸縮したり、全画面表示のプログラムに乗っかっているコントロールが画面外に移動してしまった。
そんなトラブルの解決策です。
VB.netで検証していますが、C#.netでも同様だと思います。
スポンサーリンク
問題の原因
確実な情報がないのですが、Windows10のバージョン1809のアップデートが関わっています。
令和対応のアップデートの不具合だと考えられます。
これも推測ですが、システムフォントのサイズが微妙に変わったのか、もしくは、サイズの認識方法が変わったために発生している不具合です。
システムフォントが何に影響する?
Windows Formには、AutoScaleModeというプロパティがあります。
このプロパティの値は4つ、None、Font、Dpi、Inheritです。
デフォルトではFontになっているため、システムフォントのサイズが変わると、画面のコントロールがリサイズされて、レイアウトが崩れます。
なので、FormのプロパティでAutoScaleModeをNoneに変更すると良いです。
AutoScaleModeは、.NET 2.0から追加されたので、1.0や1.1のプログラムをアップグレートしている場合は、もともとあったWindowsフォームのAutoScaleModeはInheritとなっています。
Inheritは親コントロールの設定を引き継ぐという意味です。
親コントロールって何?って思いますが、たぶんないです。
ない場合は、Fontがデフォルトとなっているようです。
デザイナのプロパティで編集したくない場合
古い.NET Frameworkのソースコードから変換して使っていたり、事情があって、デザイナのプロパティで変更したくない場合は、InitializeComponent()の前か中でAutoScaleModeの設定をする必要があります。
以下の一行を追加します。
Me.AutoScaleMode = AutoScaleMode.None
FormLoadに記述しても効果ありません。