在Form1窗体button事件中代码:private void button1_Click(object sender, System.EventArgs e)
{ if(form==null)//事先已经先定义好Form2 form;
form=new Form2();
form.Show();
}
在Form2窗体button事件中代码:this.close();
目的是为了实现点击Form1中的button弹出Form2窗体,而且无论点击多少次,始终只有1个Form2窗体,然后关闭Form2窗体以后再次点Form1窗体中的button功能依旧如上。现在我写的代码碰到个问题就是关闭了Form2窗体后再次点击Form1的button就报错,好像是因为关闭了Form2窗体但form这个实例并没有在内存中释放的原因。
后来改了下代码,在Form2中的默认构造函数里面加入代码Tag=0;button事件中加入代码Tag=1;然后吧Form1上面的if语句改成if(form==null||(int)form.Tag==1)这样功能就能实现了,可这样是在重复生成Form2窗体的实例,Form2窗体上其他变量也都没有在内存中释放,不知道长时间运行是否会发生内存泄漏的问题?各位麻烦看看,看有更好的方法解决不?最好能贴代码上来。多谢了!!!

解决方案 »

  1.   

    1.0和1.1发生内存泄露难免,要举例的话,我能举出大大堆
    2.0好象想找一个内存泄露的代码很难(至少我现在没找到)
    Form的Closed或FormClosed事件是一个非常重要的事件(两个事件区别在于支持的分别是1.x和2.x)
    对于你这个应用,必须处理这两个事件,这个事件的重要性不亚于Dispose方法
      

  2.   

    终于看完了。
    我理解的意思是:点击Form1的button显示Form2,点击Form2的button关闭Form2.再点击Form1的button显示Form2,点击Form2的button关闭Form2。依次类推。不知道楼主是否是这个意思如果是的话,form1的button这样写就可以了
    Form2 f2 = null; 
    private void button1_Click(object sender, System.EventArgs e)
    {
    if(f2!=null)
    {
    if(!f2.Created)
    {
    f2=new Form2();
    f2.Show();
    }
    }
    else
    {
    f2=new Form2();
    f2.Show();
    }
    }
      

  3.   

    Form2窗体button事件中代码:this.close();
    ___________________________________________
    楼主的需求.为什么要clocse()?
    隐藏不就行了嘛...再点的时候就显示出来不好莫?
      

  4.   

    多谢楼上各位,问题已经解决了,至于关于内存泄漏的问题,我现在正在学C#,还没全部学完,还只是学到调试那里,所以今天才有关于内存泄漏的提问,2.0我不是很了解,我现在初学,有必要升到2.0吗?我现用的是1.1的,如果要升级到2.0会不会影响VS2003.net的使用?毕竟我现在的教材是以1.1为基础的。
    最后再次感谢各位!!!