タスクバーのサイズ変更とFormのResizeイベント

Windwosのタスクバーのサイズを変更し、デスクトップのWorkingAreaを小さくすると、デスクトップ上にあったウィンドウはそれにあわせて小さくなる。
この際、当然ながら各ウィンドウにはResizeイベント(とSizeChangedイベント)が飛んでくる。

しかし逆に、タスクバーを縮めて、デスクトップのWorkingAreaを広くしても、小さくなったウィンドウはそのままなので、この場合はResizeイベントは飛んでこない。

なお、Windows.Forms.Formには別途 Resize_Begin, Resize_Endイベントがあるが、これは通常のフォームのリサイズの時は飛んでくるけど、タスクバーのサイズ変更に伴うリサイズ時は飛んでこない模様。(実際にやってみたけどだめだった)

まとめると以下の通り。(数字はイベントが起こる順番。)

通常のリサイズ(フォーム端をマウスでドラッグ)

  1. ResizeBegin
  2. Resize
  3. (Resizeを繰り返し…)
  4. Resize
  5. SizeChanged
  6. ResizeEnd

タスクバーを広げて、フォームを縮めた場合

  1. Resize(1回だけ)
  2. SizeChanged

厄介なのは、各イベントが飛んできた際に、Screen.PrimaryScreen.WorkingAreaの値を取得しても、値はリサイズ(タスクバーのサイズ変更)前のままの値しかもらえない。移動完了後に再度取得しなおすと、値が更新されている。