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

时间:2022-06-02 23:12:12

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之后的动作"); }

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

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

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

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

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

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

看到了吧,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;
}

贴个效果图

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

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开发之窗体显示、关闭与资源释放的更多相关文章

  1. C# WinForm开发 取消窗体关闭按钮

    //禁用窗体的关闭按钮 private const int CP_NOCLOSE_BUTTON = 0x200; protected override CreateParams CreateParam ...

  2. C# winform打开新窗体显示一段时间 关闭新窗体

    1.form1的button事件下: form2 form = new form2(); form.Show(); Thread.Sleep(10000);  //form2窗体显示10秒 form. ...

  3. c# Winform 开发分屏显示应用程序

    分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...

  4. winform窗体的关闭与资源的释放

    单纯的this.Dispose(); this.Close();有时候并不能释放出所用资源.因为Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,  要想强制突出当前程序要用:Sy ...

  5. Winform开发之窗体传值

    Winform的窗体之间的数据传递是开发的必备技术,下面介绍几种典型的传值方法 1.构造函数传值,但这种方法是单向的(推荐) 上代码,先传值 private void button2_Click(ob ...

  6. winform 打开一个窗体,关闭一个窗体

    例如  我要打开一个窗体b,关闭一个窗体a a中的代码添加: private void pictureBox5_Click(object sender, EventArgs e) { W_MainFo ...

  7. android开发关于popupwindow显示关闭的笔记

    一.方法一: popupWindow.setFocusable(false); //这样popupWindow无法获得焦点,无法处理popupWindow中的事件 设置MainActivity的onT ...

  8. Winform开发入门集中培训系列文章

    最近有个培训,写PPT不如写博客了,共享是程序猿的职业情操吧,因此,本人准备写一个Winform开发的系列文章,对于初级开发者来说,应该比较有用,写作当中不免错误或不成熟的地方,看到的朋友请留言指出, ...

  9. WinForm开发,窗体显示和窗体传值相关知识总结

    主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...

随机推荐

  1. [译]在Node中使用indicative来验证model

    原文: http://amanvirk.me/validating-models-in-node-js-using-indicative/\ 在nodejs中有关于验证model的包有许多, 我最喜欢 ...

  2. MongoDB学习笔记七:管理

    [启动和停止MongoDB]『从命令行启动』执行mongod,启动MongoDB服务器.mongod有很多可配置的启动选项:在命令行运行mongod --help可以查看所有选项.一些主要选项如下: ...

  3. 手机抓包-fiddler

    如果app走的是http协议,不用root,只需要通过fiddler做代理,就可以抓到所有请求. 1. fiddler+手机wifi设置 安装fiddler,勾中 Fiddler Options -& ...

  4. smarty模板中引用常量没效果

    在thinkphp框架中使用Thinkph的模板引擎,css,js等都没问题,配置为smarty模板引擎后没效果,如图 代码为,$Smarty的s是大写,此时页面不能引入常量,改为小写后正常了. &l ...

  5. Android中实现进入App之后检查网络状态

    1,注册广播,一般使用静动态注册,即当程序退出的时候广播接受者就收不到消息使用方法context.registerReceiver()方法在MainActivity中的OnStart()方法中执行注册 ...

  6. C#中List〈string〉和string[]数组之间的相互转换

    1,从System.String[]转到List<System.String> System.String[] str={"str","string&quot ...

  7. Jmeter连接SqlServer数据库进行压力测试

    Jmeter连接SqlServer数据库进行压力测试 前提准备:先安装jdbc驱动 驱动下载链接地址:http://pan.baidu.com/s/1bpDpjSr 密码:v6tn 下载解压之后,讲s ...

  8. Yii地址美化&lpar;nginx环境&rpar;

    通过urlmanager实现yii地址美化,需配合服务器中的rewrite配置     1.在'components'中加入    'urlManager'=>array(        'ur ...

  9. codeforces &num;446 892A&Tab;Greed 892B Wrath 892C Pride 891B Gluttony

    A  链接:http://codeforces.com/problemset/problem/892/A 签到 #include <iostream> #include <algor ...

  10. 深入理解java的static关键字

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...