【问题标题】:C#: Close and Open two forms from a separate formC#:从一个单独的表单关闭和打开两个表单
【发布时间】:2013-08-14 07:50:14
【问题描述】:

我有 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();

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

【问题讨论】:

标签: c# forms hide show


【解决方案1】:

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

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

【讨论】:

  • 我的程序目前还没有类,因为我还是 C# 新手。但是该程序是什么,当您启动它时,您会通过位于 .bin 文件中的数据库字典获得一个带有密码和用户名的登录表单,如果您正确登录,该表单将隐藏并显示新表单,“LoggedIn”表单,然后您可以从那里单击“LogOut”,它会弹出一个确认窗口,是或否,我提供的代码是用于“是”按钮。 LoggedIn 表单应该关闭,并且之前的另一个 Login 表单应该弹出,它确实会弹出,但是后台的当前表单没有关闭。
  • @nurtul 如果您认为您的程序没有类(呃...错误),您可能需要比我在一个答案中给出的更多的入门知识。为了加快你的速度:一个“类”就像一个对象的蓝图。 “对象”是该对象的构造实例。表单是对象,通过您在代码中编写的类(代码文件)创建。如果您创建的 (object = new MyClass()) 比您需要的多,那么就会出现混乱。也许尝试谷歌搜索“C# 类对象教程”。
【解决方案2】:

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

        Application.OpenForms[1].Hide();

[1] 是我试图隐藏的表单。它奏效了。

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

【讨论】:

  • 其实 Application.OpenForms.OfType().First().Close();更准确地说。因为 Application.OpenForms[1].Hide();仅适用一次,因为表单编号一旦隐藏就会更改。
猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多