Winform开发之窗体显示、关闭与资源释放

摘要:
Winform的窗体涉及到一般窗体、MDI窗体、窗体之间的关系等,那么如果调用打开新窗体、如何关闭窗体、窗体资源的释放等都关系到软件运行的效率,本文一一介绍1、窗体的显示从一个窗体打开另一个窗体,基本会用到两种方法,即Show()和ShowDialog(),前者是一般的窗体,后者是模态窗体。

Winform的窗体涉及到一般窗体(单文档窗体)、MDI窗体、窗体之间的关系等,那么如果调用打开新窗体、如何关闭窗体、窗体资源的释放等都关系到软件运行的效率,本文一一介绍

1、窗体的显示

从一个窗体打开另一个窗体,基本会用到两种方法,即Show()和ShowDialog(),前者是一般的窗体,后者是模态窗体。

两种调用是由些许的不同

(1)在调用Form.Show方法后,Show方法后面的代码会立即执行

(2)在调用Form.ShowDialog方法后,写在其后面的程序会在模态窗口关闭后再执行。

感觉有点儿绕啊,贴代码贴图就很清楚了

 private void button1_Click(objectsender, EventArgs e)
        {
            Form3 fr3 = newForm3();
            fr3.Show();
            MessageBox.Show("show之后的动作");
        }

        private void button2_Click(objectsender, EventArgs e)
        {
            Form3 fr3 = newForm3();
            fr3.ShowDialog();
            MessageBox.Show("showDialog之后的动作");
            
        }

Winform开发之窗体显示、关闭与资源释放第1张

下图是show的调用,那么执行完fr3.Show()之后会马上执行后面的弹出提示框

Winform开发之窗体显示、关闭与资源释放第2张

下图是showdialog的调用,那么只有当弹出的窗口fr3关闭后才会执行提示框

Winform开发之窗体显示、关闭与资源释放第3张

Winform开发之窗体显示、关闭与资源释放第4张

看到了吧,Fr3窗体关闭后才运行后面的提示框。

2、窗体之间的关系

窗体之间的关系其实很简单,当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭而最小化或关闭。

 private void button1_Click(objectsender, EventArgs e)
        {
            Form3 fr3 = newForm3();
            //fr3.Owner = this;这样设置也是可以的           
            fr3.Show(this);           
        }

上面两种方法都可以,当然ShowDialog方法也适用,下面代码是获取所有者的名称

 private void Form3_Load(objectsender, EventArgs e)
        {
            label1.Text ="该窗体的所有者是"+this.Owner.Name;
        }

贴个效果图

Winform开发之窗体显示、关闭与资源释放第5张

3、窗体的关闭、销毁

窗体的及时关闭和销毁对软件的效率、对计算机的资源占用都非常重要。

在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。所以当窗体显示为模态窗体时,单击“关闭”按钮会隐藏窗体,并将DialogResult属性设置为DialogResult.Cancel

如果不需要此模态窗口,请立即对其进行销毁,销毁代码可以用以下两种方式写

(1)在Form3的关闭事件里

 private void Form3_FormClosed(objectsender, FormClosedEventArgs e)
        {
            this.Dispose();
        }

(2)在Form3的关闭事件中将DialogResult设置为OK,在调用者里面判断后释放

//这是Form3的事件 
private void Form3_FormClosed(objectsender, FormClosedEventArgs e)
        {
            this.DialogResult =DialogResult.OK;
        }
 
//这是Form2中调用
private void button2_Click(objectsender, EventArgs e) { Form3 fr3 = newForm3(); if(fr3.ShowDialog()==DialogResult.OK) { fr3.Dispose(); } }

上述两种方法都可以实现资源的释放,下文介绍窗体传值。

免责声明:文章转载自《Winform开发之窗体显示、关闭与资源释放》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NXP 公司的 RFID 卡GCC选项-Xlinker和-Wl区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (一)

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (一) 编写人:CC阿爸   2015-1-28   在伍华聪的博客中,看到布局控件"WeifenLuo.WinFormsUI.Docking",发现的确是一个非常棒的开源控件,用过的人都深有体会,该控件之强大、美观、不亚于商业控件。而且控件使用也是比较简单的今天在...

Winform中设置Dialog的显示位置居中

场景 点击按钮使窗体以Dialog的方式显示,即弹窗。 //声明窗体对象 ChartOption chartOption = new ChartOption(); //显示Dialog chartOption.ShowDialog(); 然后设置弹窗的位置居中显示。 关注公众号霸...

vs 在高分屏下开发 winform 配置

一、窗体控件大小 第一种方法:使用网格避免整除误差在选项中将Windows窗体设计器的LayoutMode(布局模式)改成SnapToGrid(对齐到网格),并将Default Grid Cell Size(默认网格大小)设为最小可缩放单元(或它的倍数),以避免移植时产生整除误差。同时由于这些单元是可见的,也使得将控件拖到合适的尺寸非常简单。同时,应该将窗...

DevExpress中barManager下的toolbar如何在panel中显示

如题,我的Dev Toolbar需要在一个pannel中显示,并且居于最顶部。可是好像默认情况下toolbar都是在窗体的最顶部的,如何设置才能使其位于一个panel的最顶部呢? 解决方案:经过测试,发现只要更改barManager的form属性即可。不过有一点需要注意:  再设计状态下依然是位于最顶部。不过运行之后就可以看到变化了。 出处:https:/...

扩展WinForm的ComboBox

个人认为winform的combobox不是那么的好用,所以自己扩展了一下。重新定义Items属性,并且支持树结构。为每项加入了CheckBox状态。丰富的列表项类ListItem。效果如图:代码清单: {[Designer(typeof(ControlDesigner))]publicclassComboBox:System.Windows.Forms....

CDHtmlDialog探索----Javascript与窗体交互

CDHtmlDialog探索----Javascript与窗体交互 CDHtmlDialog提供了C++与网页的双向交互,通此一系统简单的宏调用可以把网页中各元素的事件直接映射到C++程序中,而在网页中调用C++功能代码就显的不那么直观了。归根结底交互的基理就是实现相应COM接口。实现方式如下: 1、在窗体初始化时调用EnableAutomation函数...