none
フォームが開いているかどうかを知る方法 RRS feed

  • 質問

  • VS2008 Professionalを使用しています。
    まだ.NET初心者です。

    Form1からForm2を開いたとして、ある時点で現在Form2が開いている状態なのか既に
    閉じてしまっている状態なのかをForm1側で知る方法はどうすればよいのでしょうか?
    Form1側で自分でフラグでも持つしかないのでしょうか?
    Formのメンバを見ていても使えそうな物を見つけられませんでした。
    2010年1月27日 5:45

回答

  • 質問の内容だと、Form2 が生存している間は、Form1 は必ず生きているのですよね。
    だったら、たとえば Form2 のインスタンスを Form1 のフォールドとして持たせておいて、

    class Form1 : Form {
      Form2 _form2;
      ・・・
    }

    _form2 が終了したかどうかは

    if (_form2 == null || _form2.IsDisposed ) {...}

    とかで判定できるかと思います。

    • 回答としてマーク paosan 2010年1月27日 8:33
    2010年1月27日 8:29
    モデレータ

すべての返信

  • Visible とか。
    2010年1月27日 6:19
  • Application.OpenFormsやMe.OwnedFormsを参照するとか。
    2010年1月27日 6:19
  • Visibleだとフォームが見えているか見えなくなっているか、であって開いているか閉じているか
    ではないという解釈なんですが、ちがうのでしょうか。
    MFCでいうShowWindow()のSW_SHOWNORMALかSW_HIDEのような違いと同じではない
    んですか?
    2010年1月27日 7:01
  • OpenFormsって開いているフォームの数は取得できますけど、フォームを
    特定できないですよね。
    実際に何種類かのフォームをForm1から開いていて、ある特定のフォームが
    開かれているかどうかの判定をしたいのです。
    OwnedFormsの使い方がちょっとよくわかりません。
    2010年1月27日 7:11
  • Visibleだとフォームが見えているか見えなくなっているか、であって開いているか閉じているか
    ではないという解釈なんですが、ちがうのでしょうか。
    MFCでいうShowWindow()のSW_SHOWNORMALかSW_HIDEのような違いと同じではない
    んですか?
    ちょっと質問が不明瞭だと思います。「開いてる状態か閉じている状態か」 というのは、

    1.見えてる Visible = True か、もしくは隠れてる(非表示)か Visible = False か
    2.インスタンスが生成されてるか、Close または Dispose されてるか
    3.ウィンドウが最小化されているか、もしくはウィンドウが普通表示または最大化されているか

    どれでしょう?(-ω-)
    2010年1月27日 8:05
    モデレータ
  • すいません、書き方がおかしかったですね。
    言いたいことはおっしゃってる中では2になります。
    よろしくお願いします。
    2010年1月27日 8:07
  • 質問の内容だと、Form2 が生存している間は、Form1 は必ず生きているのですよね。
    だったら、たとえば Form2 のインスタンスを Form1 のフォールドとして持たせておいて、

    class Form1 : Form {
      Form2 _form2;
      ・・・
    }

    _form2 が終了したかどうかは

    if (_form2 == null || _form2.IsDisposed ) {...}

    とかで判定できるかと思います。

    • 回答としてマーク paosan 2010年1月27日 8:33
    2010年1月27日 8:29
    モデレータ
  • 仰ってる方法で出来ました。IsDisposedがあったのですね。
    ありがとうございました。
    2010年1月27日 8:34