如何让课程“重置”?

时间:2010-07-21 20:44:32

标签: c# winforms forms dispose

我正在编写一个C#.NET应用程序。我有一张表格。创建表单时,我创建一个类的实例。当我关闭表单时,我想处理该类,以便下次打开表单时,我可以创建一个全新的类实例。所以,在form_Closing事件中,我添加了这样的代码:classInstance = null;问题是,由于某种原因,下次打开表单时,类不等于null,而是处于与它相同的状态就在我关闭表格之前。为什么会这样?

编辑:添加信息:

myHandler是Form类中的一个字段。 它看起来像这样:

private HSFW_Handler myHandler;

我所指的类是一个单例,所以我这样创建它:

    public static HSFW_Handler GetInstance()
    {
        if (myHSFW == null)
        {
            myHSFW = new HSFW_Handler();
            return myHSFW;
        }
        else return myHSFW;
    }

我在Form_Shown事件中创建了它的初始实例

    private void SetupDialogForm_Shown(object sender, EventArgs e)
    {
        try
        {
            myHandler = HSFW_Handler.GetInstance();
            UpdateDisplay();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

Form Closing看起来像这样......

private void SetupDialogForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        myHandler = null;
    }

2 个答案:

答案 0 :(得分:3)

我们来看看这段代码:

public static HSFW_Handler GetInstance()
{
    if (myHSFW == null)
    {
        myHSFW = new HSFW_Handler();
        return myHSFW;
    }
    else return myHSFW;
}

而且:

private void SetupDialogForm_FormClosing(object sender, FormClosingEventArgs e)
{
    myHandler = null;
}

注意什么?

您将myHandler设为null;但这似乎是SetupDialogForm的实例级成员。或者无论如何,它与myHSFW不同,HSFW_HandlermyHandler = HSFW_Handler.GetInstance(); 类中的静态变量。

当你这样做时......

myHandler

...您正在HSFW_Handler.myHSFWnull指向的同一对象的引用;但他们仍然是两个单独的参考。将一个设置为myHSFW对另一个没有影响。

所有这一切的要点是,您需要实际将null的值更改为public class HSFW_Handler { public static void DeleteInstance() { myHSFW = null; } } 才能获得您想要的行为。

我会这样做:

private void SetupDialogForm_FormClosing(object sender, FormClosingEventArgs e)
{
    HSFW_Handler.DeleteInstance();
}

然后:

{{1}}

答案 1 :(得分:0)

您确定要触发form_Closing事件,以便您关闭表单而不是隐藏它吗?

如果是这样,那么每次将classInstance设置为某事时,都要搜索代码。您可能会在构造函数中或其周围找到罪魁祸首或其他事件,例如Load或Shown。