我正在编写一个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;
}
答案 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_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();
}
然后:
{{1}}
答案 1 :(得分:0)
您确定要触发form_Closing事件,以便您关闭表单而不是隐藏它吗?
如果是这样,那么每次将classInstance设置为某事时,都要搜索代码。您可能会在构造函数中或其周围找到罪魁祸首或其他事件,例如Load或Shown。