- - PR -
フォームが閉じるタイミング 〜VB.Net on CompactFramework 1.1〜
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-20 10:40
初めまして。taniと申します。
いつも勉強させていただいております。 WindowsCEの話ですが、ここより適切な会議室が見あたりませんでしたので、ここに投稿させていただきます。 VB.Net2003 .Net CompactFramework 1.1 WindowsCE .Net Emulator4.1 を使って開発をしています。 エントリポイントはモジュールで、 Application.Run()でメインメニューを呼び出しています。 このメインメニューからフォームを3階層ほどShowDialogで呼び出すと、 DialogResultを設定しても、Close()してもフォームが閉じられなくなります。 このとき、呼び出し元の処理はShowDialog()から進むのですが、子フォームは表示されたままです。 ちなみに、どのタイミングでも良いのでDispose()するとフォームが閉じます。 しかし、できることならDispose()はしたくありません。(WindowsCEで、処理が遅いため) また、Hide()も試してみましたが、親フォームも一緒に隠れてしまうので使えません。 これの対処方法はありますでしょうか? 「WindowsCEでは、フォームの階層は2つまで」とかそのような制限があるのでしょうか? どなたかご教授願えませんか?どうぞよろしくお願いします。 ====サンプルプロジェクト(VB.Net2003) http://tanimasan.sakura.ne.jp/hhtMainTest.zip | ||||||||||||
|
投稿日時: 2006-10-20 11:00
Close メソッドは、デストローイ! ではなく WM_CLOSE に当たります。 見た目、閉じられない場合はあるでしょう。
とは言っても、ShowDialog メソッドで Form を表示した場合は、 Dispose メソッドを呼び出すことが義務づけられています。
Show メソッドであれば、必要ないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-10-20 13:03
Dispose()が義務だったなんて。。。!!!勉強になります。 子フォームも孫フォームも標準のフォームでOn_Closeに何も書いていませんが、WM_CLOSEで閉じられない(こともある)仕様ってことなんですね。。。 「子フォームならClose()で閉じられて、孫フォームならClose()で閉じられない」という点に惑いました。 何にせよ、Disposeしないとダメなんですね。 ShowDialog、Disposeで検索したら下の記事が出てきました。<= 検索力の不足を感じますorz http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=614472&SiteID=7
ん。。。。日本語が分からないorz。 「フォーム」と「ダイアログボックス」は違うのか。。。初めて知りました。 結論として、 「子フォーム.ShowDialog() はモーダルフォームとして表示される -> Close()で閉じられる」 「孫フォーム.ShowDialog() はモーダルダイアログとして表示される -> Close()で閉じられない」 というようなことだと思います。 もう少し、フォームとダイアログボックスについて勉強します。 とても勉強になりました。じゃんぬねっとさんありがとうございました。 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-10-20 13:11 ] | ||||||||||||
|
投稿日時: 2006-10-20 14:57
見た目はそのように見えます。(見えました) モーダルの制御は終了しますから、論理的には閉じられているのだと思います。
いえ、孫フォームだからというわけではないと思います。 通常は閉じられるものですから。
本当は、Dispose しなくても何とかなる仕様であるハズなんですけどね... 何かが変なのは確かだと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1