KB4497934を適用するとレイアウトが崩れる?

木曜日 , 30, 5月 2019 Leave a comment

KB4497934を適用するとフォントの大きさが変わる?」でアップデートを適用するとフォントの大きさが変わるようだと記事を書きましたが、それ以外にも違いがあるようです。

差異を確認したのはVB .NETのSystem.Windows.Forms.Formクラスを継承したクラスでインスタンス生成時に発生するフォームのResizeイベントです。
具体的には、フォームのコンストラクタから呼び出されるInitializeComponentメソッドの実行中に発生するResizeイベントの発生回数が変わります。

  • 確認した環境

Windows 10 Pro Version 1809 Build 17753.475
Visual Studio Professional 2017 Version 15.9.11
VB .NETを用いたWindows Formsアプリ

  • アップデート適用前にResizeイベントが発生するタイミング

  1. Me.ClientSizeプロパティ設定時
  2. Me.Locationプロパティ設定時
  3. フォーム内のコントロール(コンテナ)に対するEndInitメソッド実行時
  • アップデート適用後にResizeイベントが発生するタイミング

  1. Me.ClientSizeプロパティ設定時
  2. Me.Locationプロパティ設定時
  3. フォーム内のコントロール(コンテナ)に対するEndInitメソッド実行時
  4. Me.ResumeLayoutメソッド実行時

比べてみると、アップデート適用後の4回目のResizeイベントが発生したタイミングでフォームのレイアウトが崩れてしまっています。
調査のために使用したフォームでは145ピクセル相当の横ずれが生じているようです。
全体の幅が1000ピクセル強の中で145ピクセルのずれなので見た目的にはかなりの違和感があります。

4回目のResizeイベント発生自体はInitializeComponentメソッドのMe.ResumeLayoutメソッドを呼び出している部分をコメントアウトすることで抑制できます。
(かなり乱暴な方法ですが、ResumeLayoutの引数を変えるなどでは抑制できませんでした。)
しかし、Resizeイベントの発生を抑制した状態でも生成されたフォームを確認するとフォントの大きさが異なるためか、やはりレイアウトが崩れています。
全体的にフォントの横幅が狭まっているのか前詰め状態になっています。

Windows Updateで改善されるのを待つのが無難かもしれません。

InitializeComponentメソッドの変更ですが、ソースを確認すると以下のように変更をするなとコメントされている部分なので危険性を理解したうえで変更するようにしてください。

‘メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
‘Windows フォーム デザイナを使って変更できます。
‘コード エディタを使用して、変更しないでください。

※2019/05/30 14:00 「KB4497934を適用するとレイアウトが崩れる? [とりあえず解決]」にこの記事の続きを書きました。