2014年2月25日火曜日

[Windows CE] Form1.Show→Form2.ShowDialog→Form1.Hide の場合の注意点

基本かも知れないけども。

Form1とForm2を相互に行き来したい場合、
Fom1.ShowDialog()して
Form1.Btn1_Click() からForm2.Show()して処理が終わるまで待ち、
Form2.CloseButton_Click()されたら、
Form2.Hide()してForm1()に戻り、
またForm1.Btn1_Click()されたらさっきまで出してたForm2をShow()で再表示する処理を作成した。

Form2.CloseButton_Click()を押された時に、
自作のメッセージFormでShowDialog()して「閉じてもいーですか?」的に確認していたが、
何故かそいつがstaticな自分自身を持っていて、
それをShowDialog()し、OKやら押されたらForm.Close()で画面を閉じていた。

が、
メッセージForm.Close()
Form2.Hide()
とすると、次にForm2.Show()した時にForm2で操作ができなくなってしまった。(Activeじゃない感じで)

何でー!?と思ったら、
メッセージFormがstaticな上にDispose()されてないから前面に残ってたっぽい。

メッセージFormをShowDialog()した後、
メッセージForm.Close()
メッセージForm.Dispose()
メッセージForm = null

したら次回のForm2.Show()も正常に動作するようになった。

やめてよも~
自分クラスをstaticで持ってる意味がわかんないよ~
てかちゃんとDispose()しなさいよも~