トップ回答者
呼び出し元のフォームをクロースするには?

質問
回答
-
CatSystem さんからの引用
よねKENさんご指導ありがとうございます。
ご指摘の様に アプリケーションフレームワークを有効にする
にチェックを入れ シャットダウンモード を 最後のフォームが閉じるときを選んでみました。動作させると、以前と同様に終了してしまいました。
これはご指摘の親子関係になっているのかも知れません。親子関係になっているためではなくShowDialogを使っているためでしょう。
例えば、FormAからFormBをShowDialogで表示した場合、
FormBは前面に表示され、FormAを触れられません。これはShowDialogが呼び出し元フォームに対して
モーダルフォームだからです。この方法で表示を行う場合、FormBがあるのにFormAがないという状態は変ですね。CatSystem さんからの引用
親子関係とならない様に、立ち上げのフォームから別のフォームを立ち上げるにはどの様にすればよいのでしょう。
VB6の xxxx.Show 1 が変換されて xxxx.ShowDialog()となっています。先の例でいうところのFormAはFormBを表示したときにクローズしたいのであれば、
ShowDialogで表示する意味がありませんので、Showで呼び出してはどうでしょうか。
私の予想が正しければおそらくそれだけで改善はされると思います。CatSystem さんからの引用
次に、クローズしない件ですが、特に条件判断の中ではなく
順次に立ち上げた2番目のフォームを3番目のフォームロード
でクローズさせようとした場合、無視される感じでクローズされない
といった感じです。私の方でも試しましたが、ShowDialogであればおっしゃるようになりました。
それはさておき、例のFormBからFormAはどのようにクローズしているのでしょうか?
My.Forms.~を利用されているのでしょうか?
#My.Formsを使っていない場合、今までのお話の内容からはFormBはFormAへの参照を持っていないように思えるので、
#FormAをCloseする手段がありません。
これで解決しない場合は、問題の起きる最小限のコードを提示してください。
今までもエスパー的な勘を働かせているだけなので、コードなしで問題点を当てるのはなかなか難しいです。
すべての返信
-
#本題と関係ありませんが、クロースでなくクローズです。(クロースだと閉じるではなく近いの意味になります)
> VB2005のCloseでは、プログラム自体が終わってしまったり
メニューからプロジェクトのxxxxxのプロパティ(xxxxxはプロジェクト名)を開いてください。
その中のシャットダウンモードが「スタートアップフォームが閉じるとき」となっている場合、
最初のフォームが閉じる=アプリケーションの終了動作となります。
「最後のフォームが閉じるとき」を選んでみてはどうでしょうか?
呼び出し元フォームを閉じてもアプリケーションは終了しません。
ただし、親子関係にあるフォーム間で子フォームが親フォームをクローズすると子フォームも閉じられてしまいます。> クロースしてくれなかったりする。
これはどのような場合でしょうか?
もしLoadイベント内でなんらかの条件で判断してCloseしようとしているなら、それは止めましょう。
呼び出し元フォームで条件判断をして最初から新しいフォームを開かないようにしましょう。 -
よねKENさんご指導ありがとうございます。
ご指摘の様に アプリケーションフレームワークを有効にする
にチェックを入れ シャットダウンモード を 最後のフォームが閉じるとき
を選んでみました。
動作させると、以前と同様に終了してしまいました。
これはご指摘の親子関係になっているのかも知れません。
親子関係とならない様に、立ち上げのフォームから別のフォーム
を立ち上げるにはどの様にすればよいのでしょう。
VB6の xxxx.Show 1 が変換されて xxxx.ShowDialog()
となっています。
次に、クローズしない件ですが、特に条件判断の中ではなく
順次に立ち上げた2番目のフォームを3番目のフォームロード
でクローズさせようとした場合、無視される感じでクローズされない
といった感じです。
よろしくお願い致します。
-
なぜ Load イベントで判断する? (wankuma.com)
-
CatSystem さんからの引用
よねKENさんご指導ありがとうございます。
ご指摘の様に アプリケーションフレームワークを有効にする
にチェックを入れ シャットダウンモード を 最後のフォームが閉じるときを選んでみました。動作させると、以前と同様に終了してしまいました。
これはご指摘の親子関係になっているのかも知れません。親子関係になっているためではなくShowDialogを使っているためでしょう。
例えば、FormAからFormBをShowDialogで表示した場合、
FormBは前面に表示され、FormAを触れられません。これはShowDialogが呼び出し元フォームに対して
モーダルフォームだからです。この方法で表示を行う場合、FormBがあるのにFormAがないという状態は変ですね。CatSystem さんからの引用
親子関係とならない様に、立ち上げのフォームから別のフォームを立ち上げるにはどの様にすればよいのでしょう。
VB6の xxxx.Show 1 が変換されて xxxx.ShowDialog()となっています。先の例でいうところのFormAはFormBを表示したときにクローズしたいのであれば、
ShowDialogで表示する意味がありませんので、Showで呼び出してはどうでしょうか。
私の予想が正しければおそらくそれだけで改善はされると思います。CatSystem さんからの引用
次に、クローズしない件ですが、特に条件判断の中ではなく
順次に立ち上げた2番目のフォームを3番目のフォームロード
でクローズさせようとした場合、無視される感じでクローズされない
といった感じです。私の方でも試しましたが、ShowDialogであればおっしゃるようになりました。
それはさておき、例のFormBからFormAはどのようにクローズしているのでしょうか?
My.Forms.~を利用されているのでしょうか?
#My.Formsを使っていない場合、今までのお話の内容からはFormBはFormAへの参照を持っていないように思えるので、
#FormAをCloseする手段がありません。
これで解決しない場合は、問題の起きる最小限のコードを提示してください。
今までもエスパー的な勘を働かせているだけなので、コードなしで問題点を当てるのはなかなか難しいです。