zoukankan      html  css  js  c++  java
  • 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(); } }

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

  • 相关阅读:
    xshell中的nohup与&的含义
    eclipse启动服务报错:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    关于MyEclipse启动报错:Error starting static Resources;下面伴随Failed to start component [StandardServer[8005]]; A child container failed during start.的错误提示解决办法.
    组件/服务之间的通信-事件广播和订阅可以有效减少全局变量
    #css3# 可以多背景图设置
    #RXJS# 基础
    #TS# get/set
    #css3# : vs ::
    #css3# box-sizing
    #DOM# 最佳实践:head里面标签的顺序
  • 原文地址:https://www.cnblogs.com/yieryi/p/4616610.html
Copyright © 2011-2022 走看看