黑马程序员技术交流社区

标题: FrmClass窗体使用单例 [打印本页]

作者: 王国文    时间: 2012-7-29 21:34
标题: FrmClass窗体使用单例
问题:frm.dispose==true   但是  frm !=null  是为什么了????
private static FrmClass frm;

public static FrmClass GetInstance()

{

  if (frm == null)

  frm = new FrmClass();


  return frm;

}


//FormClosing事件处理程序

private void FrmClass_FormClosing(object sender, FormClosingEventArgs e)

{

  //frm = null;

  //这里如果不释放frm的话, 当关闭窗体再次调用时有时候会出现"无法访问已释放的对象"错误提示, 然而有时不会出现

  //具体的感觉是MDI环境下调用的话容易出现这个错误, 这是为什么?

}

或者  
public static FrmClass GetInstance()  

{  

  if (frm == null || frm.IsDisposed )  

  frm = new FrmClass();  


  return frm;  

}  


作者: 蔡尚猛    时间: 2012-7-29 21:49
当关闭窗体的时候,窗体已经不存在了,这个时候对象已经不存在了,因为是static 的,所以当你再次打开的时候以对象还在,所以就冲突了

作者: 许庭洲    时间: 2012-7-30 08:32
1,释放并不等于对象为空;
2,当程序执行frm.dispose==true后,系统不会自动把变量中的值清空;
3,若要清空frm ,需要自己置空。
作者: 郭正续    时间: 2012-7-30 08:47
static修饰的话,说明是静态的,这样的话在关闭窗口的话,下次打开会有冲突的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2