2010-07-21 122 views
0

我正在编写一个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); 
     } 
    } 

表单闭幕看起来像这样...

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

你能这样减少对演示该问题的一个片段。表单创建/显示代码和关闭代码。 – ChrisF 2010-07-21 20:47:24

+1

“当创建表单时,我创建了一个类的实例。” - 当您下次打开表单时,您确定不会创建该类的另一个实例吗? – dtb 2010-07-21 20:48:21

+0

可能还有其他事情正在进行。你还对班上做了什么? – MCain 2010-07-21 20:48:46

回答

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; 
} 

注意什么?

您在设置myHandlernull;但这似乎是SetupDialogForm的实例级别成员。或者无论如何,它与myHSFW不一样,它是HSFW_Handler类中的静态变量。

当你做到这一点...

myHandler = HSFW_Handler.GetInstance(); 

...你让myHandler到同一个对象的引用指向HSFW_Handler.myHSFW;但他们仍然是两个单独的参考。设置一个到null对另一个没有影响。

所有这一切的一点是,您需要实际上将myHSFW的值更改为null以获得您所期望的行为。

我会做这样的:

public class HSFW_Handler 
{ 
    public static void DeleteInstance() 
    { 
     myHSFW = null; 
    } 
} 

然后:

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

嗯我明白你的意思,但我试过了,它似乎仍然没有工作...... – PICyourBrain 2010-07-21 21:24:54

+0

@Jordan:什么是在你的'HSFW_Handler'构造函数中? – 2010-07-21 22:01:15

+0

其实我刚刚得到它。你的解决方案工作,我只需要另外设置一个null。谢谢。 – PICyourBrain 2010-07-21 22:31:57

0

你确定form_Closing事件正在被触发,所以你正在关闭表单而不是隐藏它吗?

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

+0

是的,我相信它被解雇了。看看我上面添加的代码。 – PICyourBrain 2010-07-21 20:58:04