Formの最小化とAnchor
昨日書いたのとはまた違う問題で、最小化した後復帰したら、サイズが変わるようなAnchor*1が設定されているコンポーネントのサイズが全部変わっていた。Form.AutoScaleModeとか色々弄ってみたけど、解決することはできなかった。
試行錯誤は諦めて、.NET、最小化とか入れてググって片っ端から見てたら、明らかに機械翻訳なMicrosoftのページが見つかった。()なんだよそれ!そういうことはもっと早く言ってくれよ!というか、さっさとパッチでも出せよ!しかも解決法書いてないじゃん!
まぁ、要は最小化する前にサイズを保存して、復帰したらそのサイズを戻せ、ってことなんだろう。で、最初はDeactivateイベントでWindowStateがMinimizedになったら保存してActivateイベントで復帰、見たいなことを書いたけど上手く動かなかった。どうも最小化から復帰したのにActivateイベントが呼ばれてない。また色々調べてみたら最小化とか復帰とか最大化は全部Resizeイベントが呼ばれるらしい。何でだよ……。で、Resizeイベントに復帰のコード書いて無事に最小化した後に復帰できるようになった。以下、C#のサンプルコード。(一回シンタックス・ハイライト機能を使ってみたかった、わけじゃないよ!ほんとだよ!)
bool formMinimized = false; Size webBrowserSize, urlTextBoxSize; private void MainForm_Resize(object sender,EventArgs e) { //最小化から復帰はActivateイベントじゃなくてResizeイベントらしい。何でだよ! //最小化もDeactivateイベントじゃなくてResizeイベントらしい。何でだよ! if(WindowState != FormWindowState.Minimized) { if(formMinimized) { webBrowser.Size = webBrowserSize; urlTextBox.Size = urlTextBoxSize; formMinimized = false; } else { //Anchorを使ってResizeするようなコンポーネントは全部Size退避 webBrowserSize = webBrowser.Size; urlTextBoxSize = urlTextBox.Size; } } else formMinimized = true; }
*1:たとえば"AnchorStyles.Left | AnchorStyles.Right"見たいなやつ