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

代码:privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){DialogResultre=Me... 代码:
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方法就可以单击确定正常关闭。
求解这两个方法的区别,谢谢!
展开
 我来答
百度网友801b91b
推荐于2017-11-25 · TA获得超过8071个赞
知道大有可为答主
回答量:1152
采纳率:100%
帮助的人:1661万
展开全部

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;
                //其它选择就不退出
            }
        }
百度网友f4e2724
2013-07-19 · TA获得超过298个赞
知道小有建树答主
回答量:372
采纳率:0%
帮助的人:168万
展开全部
你执行的this.Close() 这个方法的委托就是 Form1_FormClosing这个方法。你每次点击弹出框的确定按钮都会重复执行formClosing这个方法,成了一个死循环,只有当你点击取消的时候,不会重复执行formClosing方法。this.dispose()是释放当前的整个窗体资源,也就是你的这个窗体类的资源。其实他两个没啥区别。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清水栞
2013-07-19 · TA获得超过1547个赞
知道小有建树答主
回答量:1538
采纳率:50%
帮助的人:967万
展开全部
Close表示的是将窗体关闭掉,Dispose表示的是将窗体从内存中施放掉,Close在前Dispose在后
含义是不同的,虽然在你的代码里效果是一样的

就好比Load和Shown一样,前者是窗体加载完成,后者是窗体显示完成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
abcd9871
2013-07-19 · TA获得超过407个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:188万
展开全部
这个代码我现在没工具去尝试。
不过看上去好像是一个死循环?
你把方法写在FormClosing 这个窗口关闭时的事件里面,
每次弹出框你选择关闭的时候选择“是”你又跳回这个方法。
你可以断点调式自己来看。
如果你只想进一次这个FormClosing事件的话,外面定义一个全局变量来控制一下就好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
东天炜62
2013-07-19
知道答主
回答量:61
采纳率:0%
帮助的人:21.2万
展开全部
反编译看,Close里面调用Dispose() ,但在msdn里面:
在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。
望采纳!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式