winform问题,close()方法能关闭窗体吗?谢谢 c#

代码:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult re=MessageBox.Show("关闭窗口ma", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) ;
Console.WriteLine(re);
if (re== DialogResult.OK)
{
this.Close();
//this.Dispose();
}
}
如果if块里面调用close方法,而且如果单击对话框的确定就会一直弹出对话框,确定一个弹一个。直到单击取消,才退出程序(当然没走if,是该方法执行完了)。
但是使用dispose方法就可以单击确定正常关闭。
求解这两个方法的区别,谢谢!


Private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult re = MessageBox.Show("关闭窗口ma", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (re == DialogResult.OK)
            {
                //这里什么都不用做,直接退出
            }
            else
            {
                e.Cancel = true;
                //其它选择就不退出
            }
        }

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult re = MessageBox.Show("关闭窗口ma", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (re == DialogResult.OK)
            {
                this.Close();
                //这里就会都会重复执行formClosing这个方法,成了一个死循环
            }
            else
            {
                e.Cancel = true;
                //其它选择就不退出
            }
        }

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult re = MessageBox.Show("关闭窗口ma", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (re == DialogResult.OK)
            {
                this.Dispose();//是释放当前的整个窗体资源,不会重复执行formClosing这个方法,所以退出了
            }
            else
            {
                e.Cancel = true;
                //其它选择就不退出
            }
        }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-19
你执行的this.Close() 这个方法的委托就是 Form1_FormClosing这个方法。你每次点击弹出框的确定按钮都会重复执行formClosing这个方法,成了一个死循环,只有当你点击取消的时候,不会重复执行formClosing方法。this.dispose()是释放当前的整个窗体资源,也就是你的这个窗体类的资源。其实他两个没啥区别。
第2个回答  2013-07-19
Close表示的是将窗体关闭掉,Dispose表示的是将窗体从内存中施放掉,Close在前Dispose在后
含义是不同的,虽然在你的代码里效果是一样的

就好比Load和Shown一样,前者是窗体加载完成,后者是窗体显示完成
第3个回答  2013-07-19
这个代码我现在没工具去尝试。
不过看上去好像是一个死循环?
你把方法写在FormClosing 这个窗口关闭时的事件里面,
每次弹出框你选择关闭的时候选择“是”你又跳回这个方法。
你可以断点调式自己来看。
如果你只想进一次这个FormClosing事件的话,外面定义一个全局变量来控制一下就好。
第4个回答  2013-07-19
反编译看,Close里面调用Dispose() ,但在msdn里面:
在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。
望采纳!
相似回答