2012-02-07 6 views
3

フォームがすでに開いているかどうかをチェックする一般的な方法を書いてみたいと思います。それが開いている場合は、単にそれをアクティブにします。そうでなければそれを示します。今私の挑戦は、どのようなタイプのパラメータを私がTestメソッドに渡すのでしょうか?IS演算子を使用してフォームのタイプを確認する

private void Test(?? ??) 
     { 
      bool isFormOpen = false; 
      foreach (Form form in Application.OpenForms) 
      { 
       if (form is ??) 
       { 
        isFormOpen = true; 
        form.Activate(); 
       } 
      } 
      if (!isFormOpen) 
      { 

      } 
     } 

あなたはそれぞれのFormクラスのTypeを渡す必要があり、あなたのコードが書かれているおかげで Nishant

答えて

1

道...

  if (form.GetType() == theTypeParam) 
      { 
       isFormOpen = true; 
       form.Activate(); 
      } 

代替genericeを使用するようにされた - のためのthe answer from Heinziを見ますそれ。

+0

私にコードを簡単に教えてもらえますか?それは役に立つだろう。 – Nishant

+0

@Nishantが私の更新を参照... – Yahia

7

あなたは基本的にタイプを渡しているので、あなたは一般的な方法で作ることができます:私はあなたがこのような一般的な方法を使用することができ

private void Test<TForm>() 
     where TForm : Form 
    { 
     TForm form = Application.OpenForms.OfType<TForm>().SingleOrDefault(); 
     if (form != null) 
     { 

     } 
    } 
4

private static void Test<T>() 
    where T : Form 
{ 
    foreach (Form f in Application.OpenForms) 
    { 
     if (f is T) 
     { 
     } 
    } 
} 

また、フォームのタイプをメソッド

に送信することもできます
private static void Test(Type formType) 
{ 
    foreach (Form f in Application.OpenForms) 
    { 
     if (f.GetType() == formType) 
     { 
     } 
    } 
} 

また、Application.OpenFormsにはindex[string name]というパラメータもあります。したがって、フォームを識別するために型を使用したくない場合は、以下を使用して名前を識別することもできます。Application.OpenForms["myFormName"]

+0

同じフォームタイプのインスタンスが2つ以上開いている場合、このコードは期待通りに機能しますか? – Flowerking

+1

2以上の場合は例外がスローされますが、それは既に開いていればそれを作成していなければ作成すると言っているので、ユーザーが望んだと判断した動作です。フォームのインスタンスが1つだけ開いていることを確認するために、これをガードとして使用しているかのようです。 – Fen

4

のようなものとなるだろう

private void ActivateIfOpen<T>() 
{ 
    foreach (Form form in Application.OpenForms) 
    { 
     bool isFormOpen = false; 
     if (form is T) 
     { 
      isFormOpen = true; 
      form.Activate(); 
     } 
    } 
    ... 
} 

// call like this 
ActivateIfOpen<MyMainForm>(); 
0

同じクラスのウィンドウがさらにある場合、これらのすべてのウィンドウ開かれる。

関連する問題