是这样的问题,我有个主窗体,main,在main中用form1.ShowDialog() 打开form1,然后在form1中用form2.ShowDialog() 打开form2.,现在我在form2中执行this.close();结果form2和form1都关闭了。其实我只希望关闭form2,
请问这是什么原因?如何解决?

解决方案 »

  1.   

    你用form2.close();试一下。这样或许能改正过来。
    如果还是不行的话。那只能说明你代码有问题。
      

  2.   

    是不是Form1打开Form2时,form2.ShowDialog()之后加了this.Close()
      

  3.   

    明白了,你是在form2.ShowDialog();
    后面加
    this.Close();
    那是你的错啦,你把这个this.Close();放在form1中写就代表this是form1了
      

  4.   

    main里面是button里的代码:
                addgoodstype addgoodstype1 = new addgoodstype();
                addgoodstype1.ShowDialog();
    没有其他代码了,
    form1里面也是button的代码
                          addgoodstype addgoodstype1 = new addgoodstype();
                addgoodstype1.ShowDialog();
    也是这样的格式。
    而form2里有个button_cancel,就写了个this.close();执行后就出现上面的情况;
    另外:开始的时候,我把button_cancel设置为窗体的cancel控件了,觉得怕这里的问题取消了,还是问题依然
      

  5.   

    main的代码(主窗体,也是mdi父窗体):
            private void btgoods_Click(object sender, EventArgs e)
            {
                GoodsType GoodsType1 = new GoodsType();
                GoodsType1.ShowDialog();
                GoodsType1.Dispose();
            }
    GoodsType的代码(不是mdi子窗体):
            private void btadd_Click(object sender, EventArgs e)
            {
                addgoodstype addgoodstype1 = new addgoodstype();
                addgoodstype1.ShowDialog();
                addgoodstype1.Dispose();
                
                //绑定dgvGoodsTypeInfoBind用户信息
                dgvgt.Refresh();
                dgvGoodsTypeInfoBind();
            }
    addgoodstype 的代码:
            private void btno_Click(object sender, EventArgs e)
            {
                this.Close();
            }
      

  6.   

    Dispose();方法是有问题后加上去了,加上后还是有问题,比较奇怪
      

  7.   

      GoodsType1.ShowDialog(); 
                GoodsType1.Dispose(); 这是什么啊?吧窗体弹出来了。又销毁了。没有问题才怪。
      

  8.   

    晕~~~~~~~~窗体弹出来后,要执行完窗体所有操作,退出后才执行goodstype1.dispose();
    还有上面说了,这个也是有问题后才加上去的
      

  9.   

    代码不能那么写啦.........
    main的代码(主窗体,也是mdi父窗体): 
            private void btgoods_Click(object sender, EventArgs e) 
            { 
                GoodsType GoodsType1 = new GoodsType(); 
                if(GoodsType1.ShowDialog() == DialogResult.OK)
                {
                   //GoodsType 中的某个按钮设置的DialogResult的属性设置成OK
                   GoodsType1.Dispose(); 
                } 
            } 
    GoodsType的代码(不是mdi子窗体): 
            private void btadd_Click(object sender, EventArgs e) 
            { 
                addgoodstype addgoodstype1 = new addgoodstype(); 
                if(addgoodstype1.ShowDialog() == DialogResult.OK)
                {
                   //form2 中的某个按钮的DialogResult的值设置为OK   只有点击了这个按钮才会执行这里面的代码
                   addgoodstype1.Dispose(); 
                   //绑定dgvGoodsTypeInfoBind用户信息 
                     dgvgt.Refresh(); 
                   dgvGoodsTypeInfoBind(); 
                }
            } 
    addgoodstype 的代码: 
            private void btno_Click(object sender, EventArgs e) 
            { 
                this.Close(); 
            } //楼主的问题自己看出来了没, 没加任何限制,代码最终还是会执行到 GoodsType1.Dispose(); 的
      

  10.   

    楼主代码执行路线..........
    main的代码(主窗体,也是mdi父窗体): 
            private void btgoods_Click(object sender, EventArgs e) 
            { 
                GoodsType GoodsType1 = new GoodsType(); //第一步
                GoodsType1.ShowDialog(); //第二步  暂时堵塞在这里 等show出来的东西完了再执行下面的GoodsType1.Dispose();  
                GoodsType1.Dispose();  //第九步
            } 
    GoodsType的代码(不是mdi子窗体): 
            private void btadd_Click(object sender, EventArgs e) 
            { 
                addgoodstype addgoodstype1 = new addgoodstype(); //第三步
                addgoodstype1.ShowDialog(); //第四步
                addgoodstype1.Dispose();   //第六步
                
                //绑定dgvGoodsTypeInfoBind用户信息 
                dgvgt.Refresh();    //第七步
                dgvGoodsTypeInfoBind();   //第八步   这里完了 还是会到第9步去的  所有关闭了
            } 
    addgoodstype 的代码: 
            private void btno_Click(object sender, EventArgs e) 
            { 
                this.Close();  //第五步  虽然这里关闭了  但还是回到第6步
            } 
      

  11.   

    分析很有道理,但是我不加.Dispose();也一样全部关闭了,这个又是什么问题,也是我要问题的,因为是有问题才加的.Dispose();                        
      

  12.   

    还是在窗体没有执行this.close()时,ShowDialog也应该没有执行完,也就不会执行到Dispose,也就是分析上的第八步执行完后,并没有执行this.close()或其他关闭操作,也就是第二步应该还继续堵塞,不应该执行第九步。问题就在这里,他继续执行了
      

  13.   

    看下form1 中的 btadd 按钮的DialogResult(属性栏里看) 的值是不是None  不是None 改成None ,其他的值的话都会继续执行的(不需要关闭form1的代码 form1也会关闭的)
      

  14.   

    楼主再仔细看看吧,正常情况下,这样写不会出问题的,一定是哪个地方的代码除了问题,首先仔细找找addgoodstype 里面的代码
      

  15.   

    如果LZ窗体不多 操作不多的话
    就干脆不要关 窗体 
    直接用 this.Hide()
      

  16.   


    正确问题方式,正式这里设置了默认cancel,故继续执行了,^_^,问题找到了,感谢各位支持!!!