所以,我正在尝试关闭当前表单(form1
)和另一种表单(form2
),然后显示form3
。
whatsapp wForm = new whatsapp();
wForm.Close();
this.Close();
login logForm = new login();
logForm.Show();
我在早期阶段(this.Hide()
)隐藏了登录表单,
登录表单上有一个按钮,显示whatsapp表单,whatsapp表单有一个按钮,显示设置表单(这是form1
上方的当前表单),我使用(settings f = new settings(); f.DialogShow();
显示)
现在我正在尝试关闭设置和whatsapp表单,并显示登录表单。
答案 0 :(得分:1)
当一个表单控制另一个表单时,你可以陷入真正的混乱,除非有明确的父/子关系。
我建议你有一个控制对象,例如一个FormController类(这是你自己创建的),并从那里控制你的两个表单的演示。
除了整理对象之间的关系外,你还可以获得更好的单一责任映射 - 我的意思是,不应该由一种形式来控制另一种形式。相反,当在一个表单上执行某个操作时,它只会引发一个事件,告诉任何人关心该操作已经发生。如果没有人关心那就结束了,但在这种情况下,你会有一个FormController注册它对事件的兴趣,并且当它被提出时,它将是窗口控制器的工作,听取该事件并相应地处理它,即在此影响另一种形式的可见性/存在的案例。
这是我的意思的一个非常粗略的例子:
public class FormController
{
private readonly WhatsappForm whatsappForm = new WhatsappForm();
private readonly LoginForm loginForm = new LoginForm();
public FormController()
{
loginForm.SomeActionPerformed += HandleLoginActionPerformed;
}
private void HandleLoginActionPerformed(object sender, EventArgs e)
{
whatsappForm.Show();
}
}
SomeActionPerformed是登录表单引发的事件,所以:
partial class LoginForm
{
...
public event EventHandler SomeActionPerformed;
}
答案 1 :(得分:0)
我怀疑这篇文章会为你完美回答: Open Form2 from Form1, close Form1 from Form2
在子窗体上使用相关父窗体作为参数的构造函数将允许您访问子窗体中的父窗体Close()方法。