如何关闭当前表单,但在单击注销按钮时也关闭上一个表单

时间:2014-01-05 07:31:52

标签: c# winforms forms

当在form1上单击登录按钮时,将打开form2,当在form2上单击Go Form 3按钮时,它将转到Form3。我想要做的是当单击Form3中的注销按钮时,将关闭Form3和Form2,以便我只能显示Form1。我只知道如何关闭当前形式只有this.Close();

output  error

2 个答案:

答案 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”。