窗体form1,form2,按纽button1
我想第一次click button1的时候打开form2,第二次的时候关闭form2,依次类推可以重复操作
我代码写的是
private form2 formoc=new form2();
private bool i=true;
private void button1_Click(object sender, System.EventArgs e)
{
   if(i)
   {
     formoc.show();
     i=false;
   }
   else
   {
     formoc.close();
     i=true;
   }
}可是次操作只能重复一次,第2次打开时就会报错
未处理的“System.ObjectDisposedException”类型的异常出现在 system.windows.forms.dll 中其他信息:无法访问名为“test”的已处置对象。请问怎么解决

解决方案 »

  1.   

    无法访问名为“test”的已处置对象 ???test 在哪里?
    是什么?
      

  2.   

    改为if(i)
       {
         formoc.show();
         i=false;
       }
       else
       {
         formoc.Hide();
         i=true;
       }
    为什么close掉后再show就错  偶还不知道原因  在学习中
      

  3.   

    private bool i=true; if(i)
       {
         form2 formoc=new form2();     formoc.show();
         i=false;
       }
       else
       {
         formoc.close();
         i=true;
       }
      

  4.   

    "窗体关闭后,关闭在该对象内创建的所有资源并且处置该窗体"
    from MSDN估计是close后  show需要的资源被释放掉了?
    午饭时间……
      

  5.   

    因为你用的CLOSE方法,所以出现这种情况,是你的formoc窗体的资源已被释放,所以不能使用。如果你把COLSE换成HIDE就可以了。
      

  6.   

    private form2 formoc;
    private bool i=true;
    private void button1_Click(object sender, System.EventArgs e)
    {
       if(i)
       {
         formoc = new form2 ();
         formoc.show();
         i=false;
       }
       else
       {
         formoc.close();
         i=true;
       }
    }
      

  7.   

    呵呵,你都给close了,还怎么show,show哪一个实例啊!
    所以:Night_Elf(风暴虫) 兄回答的对!
      

  8.   

    两种方式:
    1. else
       {
         formoc.close();==》     formoc.Hide()
         i=true;
       }
    2.if(i)
       {
         新增实力化=》formoc = new form2 ();
         formoc.show();
         i=false;
       }
      

  9.   

    楼上诸位兄弟说的对,我觉得用Hide方法比较好,比较省资源,虽然.NET自己的GC会在CLOSE后回收它们
      

  10.   

    将form2.Close();
    改成form2.Hide();
      

  11.   

    同意  xiongchen(二氧化鬼)  ~~~
      

  12.   

    严重同意jialiang(≈≈逆水行舟≈≈),非常有效,而且节省资源!
      

  13.   

    重同意jialiang(≈≈逆水行舟≈≈),非常有效,而且节省资源!
      

  14.   

    两种解法:
    1、使用窗体隐藏。楼上的已经提到了2、寻找窗体,如果存在,就关闭它,如果不存在就打开它
    例如foreach(Form f in this.MdiChildren)
    {
    if (f is form2)
    {
    f.Close();
    return;
    }
    }form2 frmTemp = new form2();
    frmTemp.MdiParent = this;
    frmTemp.Show();
    当然,我的这个代码是针对Form2是Form1的子窗体,如果不满足这个条件,你也可以使用其它方式检测窗体是否存在关键是既然使用了Close,就要重新new
      

  15.   

    使用Hide有一个缺陷就是会保留前次使用是否的状态