タイトル : Re^5: ちょっと疑問 投稿日 : 2012/02/02(Thu) 14:43 投稿者 : 魔界の仮面弁士
> 後、モードレスフォームで Close されると Show 出来ないと注意書きされていましたが、 > モーダルフォームの Close については何も書かれていませんでした。 モードレスフォームの Close は Dispose 処理を伴いますが、 モーダルフォームの Close は Dispose 処理を伴いません。 MSDN Library の ShowDialog メソッドの項も参照してみてください。 モードレスフォームとして呼び出した場合は、Show 後も呼び出し元の処理が 行われますよね。そのため、子フォームがいつ閉じられるのかを 呼び出し側では把握しにくいのです。このためモードレスフォームでは、 閉じられるタイミングで自動的に Dispose されるよう設計されています。 一方、モーダルフォームの場合は、Dispose の責は呼び出し元にあります。 もしも自動的に Dispsoe される仕様だとすると、画面が閉じた後では、 そのオブジェクトにアクセスできなくなるため、自動破棄では都合が悪いのです。 画面が閉じた後のアクセスというのは、たとえば OpenFileDialog クラスの動作を 思い出すとわかりやすいかも知れません(OpenFileDialog は Form ではないですが)。 OpenFileDialog クラスの場合、呼び出し側は ShowDialog した後、画面が 閉じられた後に、FileName プロパティなどを読み取る必要がありますよね。 ちなみに Form だけでなく、TextBox 等の Control についても、使用後には Dispose が必要だったりします。ただし、フォームに貼り付けられている場合には、 親フォームが Dispose される際に、一緒に Dispose されるようになっているため、 通常はコントロールを意図的に Dispose する必要はありません。 |