【问题标题】:how to close current form but also close previous form when logout button is clicked单击注销按钮时如何关闭当前表单但也关闭以前的表单
【发布时间】:2014-01-05 07:31:51
【问题描述】:

当点击form1的登录按钮时,会打开form2,当点击form2的Go Form 3按钮时,会进入Form3。我想要做的是当单击 Form3 中的注销按钮时,Form3 和 Form2 将被关闭,以便我只能显示 Form1。我只知道如何关闭当前表单 this.Close();

【问题讨论】:

    标签: c# winforms forms


    【解决方案1】:

    一种简单的方法是在Form2 上订阅FormClosed eventForm3,然后在处理程序内部(在Form2 内部)只需编写this.Close()

    如果你用ShowDialog()打开Form3作为模态,在LogoutButtonClick事件处理器下你可以将Form3DialogResult设置为OK,这样会导致模态要关闭的表单,然后在Form2 上,您可以检查DialogResult,如果是“DialogResult.OK”,您可以关闭Form2。此外,您可以在VisualStudio 设计器中使用属性窗口简单地设置logoutBottunDialogResult 属性,而不是设置Form3DialogResult。这样您就不必手动设置Form3DialogResult,并且您根本不需要LogoutButton_Click 事件处理程序。

    这是第二种方法的代码示例:

    Form3 上,这将在LogoutButton_Click 事件处理程序下:

        private void LogoutButtonOnForm3_Click(object sender, EventArgs e)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    

    然后在Form2,你打开Form3 的地方你应该写st。像这样:

        Form3 f3 = new Form3();
        if (f3.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            this.Close(); // this will close the form2
        }
    

    【讨论】:

    • 我想我会尝试你的第一种方法,第二种方法不明白。我附上一张图片,我的代码是否正确?它不起作用。单击 form3 注销按钮时,它只关闭 form3 表单。对于 private void Form3_FormClosed(Object sender, FormClosedEventArgs e) 我输入了 1. @Arin Ghazarian
    • @Jordjmax 哦,是的,因为您没有将表单打开为模态。我认为在您的情况下,最好使用 'form.ShowDialog()' 方法将 'Form3' 作为模态打开。
    • 所以我在 form2 中改成了这个。仍然不行;不起作用@Arin Ghazarian private void btnGoForm3_Click(object sender, EventArgs e) { Form3 form = new Form3(); form.ShowDialog(); }
    • @Jordjmax 好的,我稍后会编辑我的答案并在那里编写一个代码示例。
    • @Jordjmax 对您有帮助吗?
    【解决方案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”。

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2021-05-14
      • 2012-01-03
      相关资源
      最近更新 更多