none
フォームをShow()で表示していますが、直後の命令を直ぐに実行しないようにするには? RRS feed

  • 質問

  • フォームを他のフォームと連動させて使うため、
    メソッド ShowDialog()ではなく、Show()で表示していますが、
    直後の命令も、フォームの表示と同時に実行されてしまいます。

    フォームを閉じた後に実行したいのですが、どうしたらいいですか?
    2014年7月7日 7:10

回答

  • FormClosedイベントで動作するコードは、Showメソッドを実行したフォームにあるので、Showメソッドで開くフォームのデザイナで設定することはできないことに注意して下さい。以下を参考にしてコードで設定する必要があります。

    (参考)
    C# 別フォームのイベントを受け取りたい。
    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1153608536


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年7月7日 8:06
    モデレータ

すべての返信

  • そのフォームのFormClosedイベント辺りに、閉じたあとに実行したい処理を移動させる必要があります。

    それ以上は、質問に具体的なものがないと返答できないですね。

    2014年7月7日 7:18
  • Show() メソッドは、画面表示命令を実行した後、そのメソッドからすぐに帰ってきます(該当画面を表示しろというだけなので、閉じるまで帰ってこないということはない)。

    それに対し、ShowDialog() は、画面を表示して、閉じるまでメソッドから帰ってきません。今回のような命令の場合複雑性を回避するため、通常は、ShowDialog() を使うことで、煩雑性を回避して読みやすいコードにします。

    ですが、ほかの処理との兼ね合いなどで、どうしても画面表示を行っているメソッドからも抜ける必要があるという場合は、Hongliang さんが書いているように、FormClosed イベントなどに処理を移動させて、継続処理を行うようにしたりします。

    もう少し具体的に書くと、どういう形にするのがよいかのアドバイスがもらえるかもしれませんよ。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    2014年7月7日 7:53
  • FormClosedイベントで動作するコードは、Showメソッドを実行したフォームにあるので、Showメソッドで開くフォームのデザイナで設定することはできないことに注意して下さい。以下を参考にしてコードで設定する必要があります。

    (参考)
    C# 別フォームのイベントを受け取りたい。
    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1153608536


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年7月7日 8:06
    モデレータ
  • Show()で表示するフォームは上位のいろんなフォームから利用される低レベルのフォームで、
    上位のフォームで書く内容を低レベルのフォームに書くことができません。

    下位のFormClosedイベントで、イベントを発生させ、
    上位のフォームでイベントをチェックし実行することで実現できました。
    ありがとうございました。

    2014年7月8日 0:31