Winform开发之窗体显示、关闭与资源释放
Winform的窗体涉及到一般窗体(单文档窗体)、MDI窗体、窗体之间的关系等,那么如果调用打开新窗体、如何关闭窗体、窗体资源的释放等都关系到软件运行的效率,本文一一介绍
1、窗体的显示
从一个窗体打开另一个窗体,基本会用到两种方法,即Show()和ShowDialog(),前者是一般的窗体,后者是模态窗体。
两种调用是由些许的不同
(1)在调用Form.Show方法后,Show方法后面的代码会立即执行
(2)在调用Form.ShowDialog方法后,写在其后面的程序会在模态窗口关闭后再执行。
感觉有点儿绕啊,贴代码贴图就很清楚了
private void button1_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3();
fr3.Show();
MessageBox.Show("show之后的动作");
} private void button2_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3();
fr3.ShowDialog();
MessageBox.Show("showDialog之后的动作"); }

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

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


看到了吧,Fr3窗体关闭后才运行后面的提示框。
2、窗体之间的关系
窗体之间的关系其实很简单,当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭而最小化或关闭。
private void button1_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3();
//fr3.Owner = this;这样设置也是可以的
fr3.Show(this);
}
上面两种方法都可以,当然ShowDialog方法也适用,下面代码是获取所有者的名称
private void Form3_Load(object sender, EventArgs e)
{
label1.Text ="该窗体的所有者是"+this.Owner.Name;
}
贴个效果图

3、窗体的关闭、销毁
窗体的及时关闭和销毁对软件的效率、对计算机的资源占用都非常重要。
在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。所以当窗体显示为模态窗体时,单击“关闭”按钮会隐藏窗体,并将DialogResult属性设置为DialogResult.Cancel
如果不需要此模态窗口,请立即对其进行销毁,销毁代码可以用以下两种方式写
(1)在Form3的关闭事件里
private void Form3_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
}
(2)在Form3的关闭事件中将DialogResult设置为OK,在调用者里面判断后释放
//这是Form3的事件
private void Form3_FormClosed(object sender, FormClosedEventArgs e)
{
this.DialogResult = DialogResult.OK;
}
//这是Form2中调用
private void button2_Click(object sender, EventArgs e)
{
Form3 fr3 = new Form3();
if(fr3.ShowDialog()==DialogResult.OK)
{
fr3.Dispose();
}
}
上述两种方法都可以实现资源的释放,下文介绍窗体传值。
Winform开发之窗体显示、关闭与资源释放的更多相关文章
- C# WinForm开发 取消窗体关闭按钮
//禁用窗体的关闭按钮 private const int CP_NOCLOSE_BUTTON = 0x200; protected override CreateParams CreateParam ...
- C# winform打开新窗体显示一段时间 关闭新窗体
1.form1的button事件下: form2 form = new form2(); form.Show(); Thread.Sleep(10000); //form2窗体显示10秒 form. ...
- c# Winform 开发分屏显示应用程序
分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...
- winform窗体的关闭与资源的释放
单纯的this.Dispose(); this.Close();有时候并不能释放出所用资源.因为Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环, 要想强制突出当前程序要用:Sy ...
- Winform开发之窗体传值
Winform的窗体之间的数据传递是开发的必备技术,下面介绍几种典型的传值方法 1.构造函数传值,但这种方法是单向的(推荐) 上代码,先传值 private void button2_Click(ob ...
- winform 打开一个窗体,关闭一个窗体
例如 我要打开一个窗体b,关闭一个窗体a a中的代码添加: private void pictureBox5_Click(object sender, EventArgs e) { W_MainFo ...
- android开发关于popupwindow显示关闭的笔记
一.方法一: popupWindow.setFocusable(false); //这样popupWindow无法获得焦点,无法处理popupWindow中的事件 设置MainActivity的onT ...
- Winform开发入门集中培训系列文章
最近有个培训,写PPT不如写博客了,共享是程序猿的职业情操吧,因此,本人准备写一个Winform开发的系列文章,对于初级开发者来说,应该比较有用,写作当中不免错误或不成熟的地方,看到的朋友请留言指出, ...
- WinForm开发,窗体显示和窗体传值相关知识总结
主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
随机推荐
- SaltStack系列(四)之实例编写
前面已经介绍的够多了,这里来让我们写一些完整的实例来梳理一下. 强调一下,sls文件的抒写格式都是"-"后面跟一个空格,然后后面跟参数: 然后后面再跟一个空格,然后是要填写的值.但 ...
- python16_day37【爬虫2】
一.异步非阻塞 1.自定义异步非阻塞 import socket import select class Request(object): def __init__(self,sock,func,ur ...
- 协变返回类型---《C++必知必会》 条款 31
一般来说,一个重写的函数与被它重写的函数具有相同的返回类型. 然而,这个规则对于“协变返回类型(covariant return type)“的情形来说有所放松.也就是说,如果B是一个类类型,并且一 ...
- Entity Framework 复杂类型(转)
为了说明什么是复杂属性,先举一个例子. public class CompanyAddress { public int ID { get; set; } public string CompanyN ...
- Java IO的Reactor模式
1. Reactor出现的原因 Reator模式是大多数IO相关组件如Netty.Redis在使用时的IO模式,为什么需要这种模式,如何设计来解决高性能并发的呢? 最最原始的网络编程思路就是服务 ...
- webpack踩过的坑(总结)
使用process.argv 获取命令行使用的参数 // 判断是否带production参数,production会压缩js var isprod = false; for (var i in pro ...
- RESTful源码笔记之RESTful Framework的Mixins小结
0x00 引言 本篇对drf中的mixins进行简要的分析总结.Mixins在drf中主要配合viewset共同使用,实现http方法与mixins的相关类与方法进行关联. from rest_fra ...
- (转载)找圆算法((HoughCircles)总结与优化
Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆 ...
- R中的路径设置
软件的路径设置对于电脑的内存管理和自己的寻根究底十分重要.所以,合理的设置R中相关路径,能更加方便快捷的管理自己的相关文件,提高学习R语言的效率,建立自己的习惯体系. R中的路径设置主要有以下几个方面 ...
- TimerPickerDialog 中 onTimeSet 执行两次的问题
开发android小闹钟的程序时,在添加闹钟时闹钟列表中总是出现两个相同的闹钟. btnAddAlarm.setOnClickListener(new View.OnClickListener() { ...