タスクバーのサイズ変更とFormのResizeイベント
Windwosのタスクバーのサイズを変更し、デスクトップのWorkingAreaを小さくすると、デスクトップ上にあったウィンドウはそれにあわせて小さくなる。
この際、当然ながら各ウィンドウにはResizeイベント(とSizeChangedイベント)が飛んでくる。
しかし逆に、タスクバーを縮めて、デスクトップのWorkingAreaを広くしても、小さくなったウィンドウはそのままなので、この場合はResizeイベントは飛んでこない。
なお、Windows.Forms.Formには別途 Resize_Begin, Resize_Endイベントがあるが、これは通常のフォームのリサイズの時は飛んでくるけど、タスクバーのサイズ変更に伴うリサイズ時は飛んでこない模様。(実際にやってみたけどだめだった)
まとめると以下の通り。(数字はイベントが起こる順番。)
通常のリサイズ(フォーム端をマウスでドラッグ)
- ResizeBegin
- Resize
- (Resizeを繰り返し…)
- Resize
- SizeChanged
- ResizeEnd
タスクバーを広げて、フォームを縮めた場合
- Resize(1回だけ)
- SizeChanged
厄介なのは、各イベントが飛んできた際に、Screen.PrimaryScreen.WorkingAreaの値を取得しても、値はリサイズ(タスクバーのサイズ変更)前のままの値しかもらえない。移動完了後に再度取得しなおすと、値が更新されている。