我有两个窗口形式; Form1.cs 和 Form2.cs 。
以下是 Form1.cs 的代码,其中将显示 Form2.cs 并隐藏当前的 Form1.cs
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
以下是 Form2.cs 的代码,其中将显示 Form1.cs 并隐藏当前的 Form2.cs
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
我已经监视了应用程序的内存使用情况,我注意到每次执行上面的代码时应用程序的内存使用量都在增加。
答案 0 :(得分:3)
您在每次点击按钮时都会创建新表单,因此您可以在多次单击按钮后在内存中保存多个实例。
您可能正在寻找this.Close()
而不是this.Hide()
,因为前者会关闭并处理当前表单,而后者只会隐藏它。
如果要隐藏和重新显示表单,则需要保留对表单的引用。有很多考虑因素(表单应该只实例化一次,还是每次请求实例化?是否可以打开同一表单的多个实例?等等)以及可能的模式和(第三方)解决方案(例如Application Controller,What is a proper way of building Winform apps with multiple “screens”)。
一种解决方案是简单地创建自己的表单注册表,其中每个表单都有一个单例:
public static class FormRegistry
{
private static Lazy<Form1> _form1 = new Lazy<Form1>(() => new Form1());
public static Form1 Form1
{
get
{
return _form1.Value;
}
}
private static Lazy<Form2> _form2 = new Lazy<Form2>(() => new Form2());
public static Form2 Form2
{
get
{
return _form2.Value;
}
}
}
然后在代码中的任何地方,您都可以FormRegistry.Form1.Show()
。请注意,此代码是一个概念证明,存在许多问题,而且还有很大的改进空间,但它可以为您提供一般性的想法。