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还是我需要做其他事情?
行LoggedIn loggedinform = new LoggedIn()
将创建该登录窗口的一个新实例。如果你打算同时在屏幕上显示5个"登录"窗口,这可能会很有用。我认为您想要做的是检索已经显示的登录窗口的引用,并隐藏它;因此,避免创建新的。
正确地传递对程序中现有对象的引用是一种结构问题,也是我在早期编程时经常遇到的问题。快速、不干净且通常不推荐的方法是将这些奇异对象的实例(例如,您的登录窗口)声明为static
,这样就可以在任何地方检索它们。然而,为了以最好的方式完全回答您的问题,也许您可以更多地描述程序的结构(一般来说,不需要完整的代码,只是类之间的流是什么)
好的,我想明白了。我可以使用
Application.OpenForms[1].Hide();
[1] 是我试图隐藏的形式。它奏效了。
多亏了Katana,我也意识到它为什么不起作用是有道理的,因为它基本上是在制作一个新的表单实例,而不是找到当前的实例。对不起,我的代码一团糟。