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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
                //其它选择就不退出
            
        

参考技术A 你执行的this.Close() 这个方法的委托就是 Form1_FormClosing这个方法。你每次点击弹出框的确定按钮都会重复执行formClosing这个方法,成了一个死循环,只有当你点击取消的时候,不会重复执行formClosing方法。this.dispose()是释放当前的整个窗体资源,也就是你的这个窗体类的资源。其实他两个没啥区别。 参考技术B Close表示的是将窗体关闭掉,Dispose表示的是将窗体从内存中施放掉,Close在前Dispose在后
含义是不同的,虽然在你的代码里效果是一样的

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

WinForm------如何打开子窗体的同时关闭父窗体

方法:

如何打开子窗体的同时关闭父窗体
this.Hide();
new Frm_Management().ShowDialog();
this.Close();

 

以上是关于winform问题,close()方法能关闭窗体吗?谢谢 c#的主要内容,如果未能解决你的问题,请参考以下文章

winform窗体怎么获得焦点

C# winform 点击一个按钮退出窗体 并关闭相应的进程

WinForm------如何打开子窗体的同时关闭父窗体

winform点按钮弹出一个窗体,然后上一个窗体关闭,怎么实现?

如何在winform窗体关闭时结束所有创建的线程

WINFORM如何关闭主窗口?