2011-12-27 5 views
1

私はMDIフォームを持っています。私は別のフォームが実行されている場合、このフォームの実行中の子の中でチェックしたいと思います。以下のような何か:MyForm2は私が探していますフォームの名前(クラス名)である別のフォームがMDIの親で実行されている場合、子フォームからチェックする方法は?

if (this.MdiParent.MdiChildren.Contains(MyForm2)) 
    { 
     //Do Stuff 
    } 

。コンパイラは、「クラス名はこの時点で有効ではありません」のように表示されます。

これを正しく行うにはどうすればよいですか?

+0

「MyForm2」のインスタンスが複数存在する場合は、それぞれに何かしたいですか?あるいは、単に 'MyForm2'が存在するかどうかを知る必要はありますか? –

答えて

2

MdiChildrenコレクションを循環するループを作成して、指定されたタイプのフォームが存在するかどうかを確認するだけです。含めると、有効なデータを返すために特定のインスタンスが必要です。

 foreach (var form in this.MdiParent.MdiChildren) 
     { 
      if (form is MyForm2) 
      { 
       // Do something. 

       // If you only want to see if one instance of the form is running, 
       // add a break after doing something. 

       // If you want to do something with each instance of the form, 
       // just keep doing something in this loop. 
      } 
     } 
+0

@ScottRippey:このコードは、MyForm2がクラスの名前なので、このコードは非常にうまくいきます。 –

+0

このコードはフォームごとに複数回実行されます... OPは 'MyForm2'が存在するかどうかを知りたがっていて、「何かをやりたい」と思っています。ですから、 'break;'なんかを追加することをお勧めします。 –

+0

@ScottRippey:OPは、フォームの検索の意図について質問で明確にしていませんでした。各インスタンスから値を収集したい場合や、フォームのインスタンスが開いているかどうかを知りたい場合があります。曖昧さを反映させ、いずれのシナリオにも方向性を与えるために、回答にコメントを追加しました。 –

2

各子供のタイプを確認する必要があります。あなたは子供が正しい型であるかどうかを判断するためにisキーワード(more info)を使用することができる。例えば

if (this.MdiParent.MdiChildren.Any(child => child is MyForm2)) 
{ 
} 

.Any()方法はSystem.Linqへの参照が必要です。 Read more about Any()

+0

'MdiChildren.OfType ().Count()> 0'も機能します。 – LarsTech

+0

@LarsTechまたは 'MdiChildren.OfType ().Any()' ...しかし、私のオリジナルの方法は間違いなく最も読みやすいです。 –

+1

クワブ:十分に選択的ではありません。 MyForm2から派生したフォームも見つかります。考慮するchild.GetType()== typeof(MyForm2)。 –

関連する問題