如何应用这里的单例模式来防止一次又一次地创建form3对象

本文关键字:一次又一次 创建 对象 form3 单例模式 何应用 应用 这里 | 更新日期: 2023-09-27 18:03:52

public Form fr;
private void button2_Click(object sender, EventArgs e)
{
       fr = Form1.ActiveForm;
       fr.Hide();
       Form3 fr1 = new Form3(fr);
       fr1.Show();
}

如何应用这里的单例模式来防止一次又一次地创建form3对象

您不需要将Form3创建为单例(我认为您不能这样做),但您只需要实例化它一次。例如,你可以这样写:

public Form fr;
Form3 fr1 = null;
private void button2_Click(object sender, EventArgs e)
{
       fr = Form1.ActiveForm;
       fr.Hide();
       if(fr1==null)
        fr1 = new Form3(fr);
       fr1.Show();
}

不要。

你不能在UI组件中使用单例模式,因为Windows窗体封装了一个Win32 hWnd窗口,该窗口最终需要被处理掉,并且你不能复活窗口,你必须重新创建它,这与单例模式相反。

此外,Windows窗体设计器需要一个公共默认构造函数。即使您可以使用单例,您也需要在每次在设计器中编辑表单时禁用私有构造函数。

假设您的项目没有消费者,一个更好的主意是将表单更改为internal,然后自己跟踪每个实例化。