Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我有一个单例表单名FCD无法访问已处理对象的问题。对象名称:';FCD'';_C#_Winforms - Fatal编程技术网

C# 我有一个单例表单名FCD无法访问已处理对象的问题。对象名称:';FCD'';

C# 我有一个单例表单名FCD无法访问已处理对象的问题。对象名称:';FCD'';,c#,winforms,C#,Winforms,这里的代码错误这是另一个表单内容 FCD表单的按钮 private void Button1_Click(object sender, EventArgs e) { f = FCD.getInstance(); f.Show(); } 而FDC类是 public partial class FCD : Form { private static FCD instance=null; private FCD()

这里的代码错误这是另一个表单内容 FCD表单的按钮

private void Button1_Click(object sender, EventArgs e)
    {

        f = FCD.getInstance();
        f.Show();
   

    }
而FDC类是

public partial class FCD : Form
{
    private static FCD instance=null;
    private FCD()
    {
        InitializeComponent();
        load();
    }

    public static FCD getInstance()
    {
        if(instance == null)
        {
            instance = new FCD();
        }
        return instance;
    }

问题是,当我第一次执行fcd表单时,当我关闭它时,它会工作。我再试一次,他们给了我这个问题,所以在一次大讨论后,我找到了这个解决方案

private void Button1_Click(object sender, EventArgs e)
    {
        if(f!=null)
        if (f.IsDisposed)
        {
            FCD.setInstanceNull();
        }

        f = FCD.getInstance();
        f.Show();
       
   

    }
我添加了一个方法,如果表单关闭,它将instance=null

    public static void setInstanceNull()
    {
        instance = null;

    }

检查实例
是否已显示
。请尝试以下操作:

更改自

public static FCD getInstance()
{
    if(instance == null)
    {
        instance = new FCD();
    }
    return instance;
}
public static FCD getInstance()
{
    if(instance == null || instance.IsDisposed)
    {
        instance = new FCD();
    }
    return instance;
}

public static FCD getInstance()
{
    if(instance == null)
    {
        instance = new FCD();
    }
    return instance;
}
public static FCD getInstance()
{
    if(instance == null || instance.IsDisposed)
    {
        instance = new FCD();
    }
    return instance;
}

我认为您必须覆盖关闭事件并隐藏表单,而不是实际关闭它。处理表单的是关闭操作两件事1)表单中的静态方法没有多大意义,因为除非捕获关闭事件,否则退出时表单将进行处理2)再次在静态方法中调用新FCD没有多大意义。请参阅我的两个表单解决方案:当
FCD
的静态实例关闭时,它需要将
instance
设置为
null
。当表单关闭时,将
instance
设置为
null
将撤消单例模式。无论如何,为什么这里需要一个单例呢?在我给你的链接中讨论的事件中,你是否尝试过将
instance
设置为
null
?让单例的调用者担心这种事情是非常奇怪的(这就是为什么我建议这样做的原因)。