tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 する必要はありません。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。