投稿者 m190  (社会人) 投稿日時 2012/6/3 22:13:26
やり方が様々あるというだけでなく、使い方も色々だよ、ってことも言えますね。
たとえば、あくまで Form1がメインで一時的に Form2を表示するのか、それとも Form1は
用済みだから破棄しちゃって Form2に乗り換えたいのか、あるいは Form1が本命なんだけど 
Form2も Form3も Form4も色ーんな Formとお付き合いしたいのか、そのお付き合いの仕方(?)
みたいのを想定すると、逆にどれが適切な手法かが選び易くなる、、、みたいな感じでしょうか。


話は変わりますが、
終了ボタンとForm右上の×ボタンの区別について、最初は、FormClosing イベントのときに渡される 
FormClosingEventArgs クラスの CloseReason プロパティなどで調べれば違いが分かるかと思ったんですが、
(実験の仕方が悪いのかもしれませんけど)どちらの場合も UserClosing だったため見分けることが出来ませんでした。
# Form1側 を閉じたときの FormOwnerClosing ならば区別できました

仕方が無いので、何か簡単そうな方法はないかと考えたんですが、
終了の方法(=Closeの呼び出しかどうか)の情報をクラスレベルで持つことにして、
その情報を見て処理を切り分ける、って感じの流れになるのかな?と思いました。

たとえば
終了ボタンを押したとき、情報に「終了ボタンを押したんだよ!(=Closeの呼び出しだよ!)」
みたいな情報を記憶させた上で Close()メソッドを呼び出す。
#Showが出来るんだから、Closeメッソドをオーバーロードしても良いのかも

そして Formが閉じられる際に必ず通過する FormClosingイベントなどでその情報を読み取って、
もしそれが、×ボタンによる終了だったら(=Closeメソッドの呼び出しではない場合)
Closeをキャンセルする、みたいな感じです。

#ただ、他に方法ありそうな気もするんですが、、、何だかヘルプ読んでても難しくて。。。
一番手軽そうだったのがこの方法でした。