一种存储所有形式对象的通用类

时间:2015-01-27 15:18:46

标签: c# winforms forms object

我有一个包含8个表单的Windows窗体项目。我每次打开新表格时都会这样做:

new FormX().Show();
this.Hide();

由于这个原因,我意识到我正在创建同一形式的多个对象,而它之前的副本存在,即如果我打开FormX然后我隐藏它并调用下一个Form。当我的工作完成并且我不得不回到FormX时,我再次创建了该对象。我不想这样做,因为这会消耗内存并使应用程序变慢。

我想知道是否有办法将所有表单的所有对象存储在一个类/表单中,如下所示:

Form1 obj1=new Form1();
Form2 obj2=new Form2();

每当我需要让其中一个可见时,我只需编写obj1.show()或obj2.show()

是否可以将这些对象存储在Program.cs类中?

1 个答案:

答案 0 :(得分:0)

这个问题有些模糊。但根据您的要求,除了您建议的那个之外,您还有几个选择:

  1. 不要尝试重复使用表单。而不是致电Hide(),只需致电Close()
  2. 将每个Form类实现为单例。然后确保关闭每个表单(即继续调用Hide()),并从静态实例属性访问相关实例。
  3. #2的例子:

    class Form1 : Form
    {
        private static readonly Lazy<Form1> _instance = new Lazy<Form1>(() => new Form1());
        public static Form1 Instance { get { return _instance.Value; } }
    }
    

    然后在其他地方......

    Form1.Instance.Show();
    // ... do some stuff with Form1
    Form1.Instance.Hide();