会社行きたくなかったんです。

自由になりたくて会社辞めました

VB.net プログラミング

Windows Formでコントロールが縦や横に伸縮する問題の対処法

投稿日:

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に記述しても効果ありません。

-VB.net, プログラミング

Copyright© 自由になりたくて会社辞めました , 2019 AllRights Reserved Powered by AFFINGER4.