C# 如何在这里应用单例模式来防止一次又一次地创建fom3对象

C# 如何在这里应用单例模式来防止一次又一次地创建fom3对象,c#,C#,您不需要将Form3创建为singleton(我认为您不能这样做),但只需要实例化一次。例如,您可以使用如下内容: public Form fr; private void button2_Click(object sender, EventArgs e) { fr = Form1.ActiveForm; fr.Hide(); Form3 fr1 = new Form3(fr); fr1.Show(); } 不要 您不能在UI组件中

您不需要将
Form3
创建为singleton(我认为您不能这样做),但只需要实例化一次。例如,您可以使用如下内容:

public Form fr;
private void button2_Click(object sender, EventArgs e)
{

       fr = Form1.ActiveForm;

       fr.Hide();

       Form3 fr1 = new Form3(fr);
       fr1.Show();
}
不要

您不能在UI组件中使用单例模式,因为Windows窗体封装了Win32 hWnd窗口(最终需要处理),并且您无法恢复窗口,必须重新创建它,这与单例模式相反

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


假设您的项目没有使用者,更好的办法是将表单更改为
内部
,自己跟踪每个实例。

为什么需要单例?您有一个对
表单的类级引用
,调用
Hide
不会破坏表单。如果正确实例化了类级变量,则不需要创建新实例。只需对引用调用
Show
。正如Kenneth所说,这里不需要singleton。构造一次,您可以根据需要多次执行
.Show()
.Hide()
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();
}