当在form1上单击登录按钮时,将打开form2,当在form2上单击Go Form 3按钮时,它将转到Form3。我想要做的是当单击Form3中的注销按钮时,将关闭Form3和Form2,以便我只能显示Form1。我只知道如何关闭当前形式只有this.Close();
答案 0 :(得分:3)
一种简单的方法是在FormClosed
订阅event
Form3
Form2
,然后在处理程序内部(Form2
内)简单地写{{1} }}
如果您使用this.Close()
打开Form3
作为模式,在ShowDialog()
的{{1}}事件处理程序下,您可以设置Click
LogoutButton
} DialogResult
,这将导致模态窗体关闭,然后在Form3
上您可以检查OK
,如果是“DialogResult.OK”,您可以关闭{ {1}}。此外,您只需使用属性窗口设置Form2
设计器中DialogResult
的{{1}}属性,而无需设置Form2
的{{1}}。这样您就不必手动设置DialogResult
的{{1}},根本不需要Form3
事件处理程序。
以下是第二种方法的代码示例:
在DialogResult
上,这将位于logoutBottun
事件处理程序:
VisualStudio
然后在DialogResult
,你打开Form3
你应该写st。像这样:
LogoutButton_Click
答案 1 :(得分:2)
通常的挂断是跟踪所有现有的表单对象。注销功能是应用程序全局功能,因此将其设置为静态方法是合适的。 Application.OpenForms属性可用于查找表单实例。静态方法可能如下所示:
public static void Logout() {
for (int ix = Application.OpenForms.Count - 1; ix >= 0; --ix) {
var frm = Application.OpenForms[ix];
if (frm.GetType() != typeof(Form1)) frm.Close();
}
}
注意如何向后迭代OpenForms集合很重要,关闭表单会改变集合。现在注销按钮很简单:
private void LogoutButton_Click(object sender, EventArgs e) {
Form1.Logout();
}
重命名Form类以保持代码可读。 “Form1”应该是“MainWindow”。