首页 > 解决方案 > C# 从另一个窗体打开一个窗体(处理内存过多)

问题描述

我一直在寻找从另一个已经显示的表单打开第二个表单的方法。

这是一段有效的代码:

frmSecond second = new frmSecond();
this.Hide();
second.ShowDialog();
this.Close();

它所做的基本上是对Hide()当前打开的表单,然后打开另一个表单(ShowDialog()方法)。Close()当您刚刚创建的表单关闭时,它只会显示当前隐藏的表单。

这里的问题是:这种做法会创建一个巨大的表单线程。如果我需要从frmSecondto frmThird,它将保持第一个表单并frmSecond在后台执行,同时只显示frmThird.

然后,由于frmThird是打开的,如果我需要回到第一个表单,我会使用一些代码,例如:

frmFirst first = new frmFirst();
this.Hide();
first.ShowDialog();
this.Close();

它会创造另一个frmFirst!然后我们将在后台执行三个表单(第一个frmFirstfrmSecondfrmThird)。

此方法有效,但使用的处理内存量越来越大,这可能对任何类型的项目都不利。

是否有任何替代方案或加起来来纠正这个问题?

如果有任何不清楚的地方,请不要费心让我知道。谢谢你。

标签: c#.netwinforms

解决方案


如果您想访问已创建的表单,请尝试使用静态Application.OpenForms属性。它包含当前在您的应用程序中打开的所有表单的列表。文档在这里

例如,如果您总是想保持frmFirst打开状态,然后在关闭其他表单之一时导航回它,您可以这样做:

frmFirst existing = Application.OpenForms.OfType<frmFirst>().FirstOrDefault();
if (existing != null)
    existing.Show();

您需要删除您的this.Close()呼叫才能使其正常工作。


推荐阅读