我有三个窗口窗体,我有一个按钮form1
和一个按钮form2
,如果form1
已单击按钮,则显示form2
:
form2 f2 = new form2();
f2.show();
form1
仍然在背景中并且可见。上还有一个按钮form2
。单击该按钮时,会发生form2
在后台运行并form3
显示的相同事件。什么时候form3
显示我想隐藏form1
。
我怎样才能做到这一点?是否有任何属性可以帮助我知道后面运行的是哪种形式?
您可以检查您的表单是否有焦点
bool foc = formX.Focused;
您可以使用:Application.OpenForms
.
您可以使用Application.OpenForms集合来迭代打开的表单。
然后检查你的名字Form1
可以Hide
试试
foreach(Form f in Application.OpenForms)
{
if(f.Name == "Form1")
{
f.Hide();
break;
}
}
Form2
打开时应该触发一个自定义事件Form3
。 Form1
应该在显示时订阅该自定义事件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();
}
}
是的,您可以使用Application.OpenForms属性来查找应用程序的所有打开表单的集合。
另一种解决方案是可以像调用者表单一样传递父表单参数。例如:对于Form2
父是Form1
,对于Form3
父idForm2