0

我有三个窗口窗体,我有一个按钮form1和一个按钮form2,如果form1已单击按钮,则显示form2

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

form1仍然在背景中并且可见。上还有一个按钮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打开时应该触发一个自定义事件Form3Form1应该在显示时订阅该自定义事件Form2,然后Form1可以将其隐藏在该事件处理程序中。

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属性来查找应用程序的所有打开表单的集合。

另一种解决方案是可以像调用者表单一样传递父表单参数。例如:对于Form2父是Form1,对于Form3父idForm2

于 2012-12-18T14:39:15.077 回答