C#:从一个单独的窗体中关闭和打开两个窗体

本文关键字:窗体 两个 一个 单独 | 更新日期: 2023-09-27 18:27:35

我有三种形式。如何使一个表单显示为.Show(),另一个表单隐藏为.Hide()?

这是我的代码的一部分

    private void buttonYes_Click(object sender, EventArgs e)
    {
        LoggedIn loggedinform = new LoggedIn();
        loggedinform.Hide(); // Hides another form that is in the background
        MainForm mainform = new MainForm();
        mainform.Show(); // Show first form
        this.Hide(); // Hides current form
    }

有一个问题,LoggedIn表单不会隐藏自己。从外观上看,它跳过了它,只选择了主窗体。显示();

这是一个bug还是我需要做其他事情?

C#:从一个单独的窗体中关闭和打开两个窗体

LoggedIn loggedinform = new LoggedIn()将创建该登录窗口的一个新实例。如果你打算同时在屏幕上显示5个"登录"窗口,这可能会很有用。我认为您想要做的是检索已经显示的登录窗口的引用,并隐藏它;因此,避免创建新的。

正确地传递对程序中现有对象的引用是一种结构问题,也是我在早期编程时经常遇到的问题。快速、不干净且通常不推荐的方法是将这些奇异对象的实例(例如,您的登录窗口)声明为static,这样就可以在任何地方检索它们。然而,为了以最好的方式完全回答您的问题,也许您可以更多地描述程序的结构(一般来说,不需要完整的代码,只是类之间的流是什么)

好的,我想明白了。我可以使用

        Application.OpenForms[1].Hide();

[1] 是我试图隐藏的形式。它奏效了。

多亏了Katana,我也意识到它为什么不起作用是有道理的,因为它基本上是在制作一个新的表单实例,而不是找到当前的实例。对不起,我的代码一团糟。