1

我有 3 个表格。我怎样才能使一个表单用 .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 表单不会隐藏自己。从它的外观上看,它跳过了它,只是去 mainform.Show();

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

4

2 回答 2

0

该行将LoggedIn loggedinform = new LoggedIn()创建该登录窗口的新实例。如果您打算同时在屏幕上显示 5 个“登录”窗口,这可能会很有用。我认为您要做的是检索对已经显示的登录窗口的引用,然后将其隐藏;所以,避免创建一个新的。

在程序周围正确传递对现有对象的引用是一种结构性问题,在我早期的编程日子里,我遇到了很多问题。快速、不干净且通常不推荐的方法是将这些单一对象(例如,可能是您的登录窗口)的实例声明为static,以便可以在任何地方检索它们。但是,要以最佳方式完全回答您的问题,也许您可​​以多描述一下程序的结构(不需要完整的代码,一般来说,类之间的流程是什么)

于 2013-08-12T20:59:15.060 回答
0

好的,我想通了。我可以用

        Application.OpenForms[1].Hide();

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

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

于 2013-08-12T21:13:34.760 回答