0

3つのウィンドウフォームがあります。ボタンがform1あり、ボタンがあります。ボタンがクリックされているform2場合は、次のように表示されます。form1form2

form2 f2 = new form2();
f2.show();

form1まだ背景にあり、表示されています。にもう1つのボタンがありますform2。そのボタンがクリックされるとform2、バックグラウンドで実行されて表示form3されるのと同じイベントが発生します。表示されたらform3非表示にしform1ます。

どうやってやるの?どのフォームが背後で実行されているかを知るのに役立つプロパティはありますか?

4

5 に答える 5

1

フォームにフォーカスがあるかどうかを確認できます

bool foc = formX.Focused;
于 2012-12-18T14:38:41.337 に答える
1

使用できます:Application.OpenForms

于 2012-12-18T14:39:03.387 に答える
1

Application.OpenFormsコレクションを使用して、開いているフォームを反復処理できます。
それからあなたの名前をチェックすることはそれForm1を試みることができますHide

foreach(Form f in Application.OpenForms)
{
   if(f.Name == "Form1")
   {
      f.Hide();
      break;
   }
}
于 2012-12-18T14:39:14.103 に答える
1

Form2開いたときにカスタムイベントを発生させる必要がありますForm3Form1shoudlは、表示されたときにそのカスタムイベントをサブスクライブしForm2Form1そのイベントハンドラーで自分自身を非表示にすることができます。

public class Form2
{
    public event Action Form3Opened;

    public void Bar
    {
        Form3 other = new Form3();
        Form3Opened();
        other.Show();
    }
}

public class Form1
{
    public void Foo()
    {
        Form2 other = new Form2();
        other.Form3Opened += () => Hide();
        other.Show();
    }
}
于 2012-12-18T14:40:35.740 に答える
0

はい、 Application.OpenFormsプロパティを使用して、アプリケーションの開いているすべてのフォームのコレクションを見つけることができます

もう1つの解決策は、呼び出し元フォームのような親フォームパラメーターを渡すことです。例:Form2親の場合はForm1Form3親IDの場合Form2

于 2012-12-18T14:39:15.077 に答える