C#中FormClosing与FormClosed的区别详细解析

C#是一种非常流行的编程语言,常被用于开发Windows上的桌面应用程序。在Windows窗体应用程序中,我们会经常使用到FormClosing和FormClosed事件来监测窗体关闭的状态。但是,许多人对这两个事件的具体区别并不是很清楚。在本文中,我们将详细讲解这两个事件的区别及其使用示例。

FormClosing事件

当Windows窗体应用程序正在关闭并且在关闭过程中时,FormClosing事件将被激活。这个事件允许我们在窗体关闭之前执行某些操作。例如,我们可以向用户询问是否真的要关闭应用程序,或者保存一些数据等操作。如果FormClosing事件的Handler函数中Cancel事件被设置为True,那么窗体将不会关闭。

以下是一个简单的FormClosing事件的代码示例:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr;
    dr = MessageBox.Show("你确定要关闭应用程序吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
    if (dr == DialogResult.No)
    {
        e.Cancel = true;
    }
}

在这个示例中,我们向用户询问是否真的要关闭应用程序,如果用户点击“否”,则窗体将不会关闭。

FormClosed事件

当Windows窗体应用程序已经关闭时,FormClosed事件将被激活。在这个事件的处理函数中,我们可以释放资源和进行垃圾回收等操作。因为在这个时候我们无法取消关闭操作,所以我们不能在这个事件中进行任何需要取消的操作。

以下是一个简单的FormClosed事件的代码示例:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    //进行资源释放和垃圾回收等操作
}

在这个示例中,我们只是简单地释放资源和进行垃圾回收等操作。

总结:

FormClosing事件和FormClosed事件都是用于监测Windows窗体应用程序关闭的状态。区别在于,FormClosing事件在窗体关闭之前激活,FormClosed事件在窗体关闭之后激活。我们可以利用FormClosing事件来进行一些需要取消关闭操作的操作,或者向用户确认关闭操作。FormClosed事件可以用于释放资源和进行垃圾回收等操作。

示例:

让我们来看一个完整的示例。假设我们需要保存用户输入的文本内容。我们可以在FormClosing事件中向用户问询是否保存,并且在FormClosed事件中进行保存操作。

public partial class Form1 : Form
{
    bool isTextChanged = false;
    string filePath = "";

    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        isTextChanged = true;
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (isTextChanged == true)
        {
            DialogResult dr = MessageBox.Show("是否要保存文本内容?", "保存文件", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
            if (dr == DialogResult.Yes)
            {
                if (filePath == "")
                {
                    SaveFileDialog sfd = new SaveFileDialog();
                    sfd.Filter = "文本文件|*.txt";
                    if (sfd.ShowDialog() == DialogResult.OK)
                    {
                        filePath = sfd.FileName;
                    }
                }
                if (filePath != "")
                {
                    File.WriteAllText(filePath, textBox1.Text);
                }
                else
                {
                    e.Cancel = true;
                }
            }
            else if (dr == DialogResult.Cancel)
            {
                e.Cancel = true;
            }
        }
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        //进行资源释放和垃圾回收等操作
    }
}

在这个示例中,我们先定义了一个bool变量isTextChanged来检测文本框内容是否被改变过,以及一个string变量filePath来存储文件路径。在textBox1_TextChanged事件中,我们将isTextChanged设置为true,表明文本框内容已经被修改。在FormClosing事件中,我们向用户询问是否保存文件,如果是,则用SaveFileDialog保存文件并将isTextChanged置为false。如果没有选择文件路径,则设置e.Cancel为true,这样窗体就不会关闭。在FormClosed事件中,我们可以进行资源释放和垃圾回收等操作。

这就是FormClosing与FormClosed的区别详细解析以及示例的完整攻略,希望能帮助到大家。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中FormClosing与FormClosed的区别详细解析 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 解读C#中ReadString的一些小疑惑

    解读C#中ReadString的一些小疑惑 C#中的ReadString()方法是一个重载方法,用于从流中读取一个字符串。在使用这个方法时,可能会遇到一些小疑惑,接下来我们将一一解答。 问题一:ReadString的参数 ReadString方法有两种重载形式: public string ReadString(); public string ReadSt…

    C# 2023年6月7日
    00
  • 轻松学习C#的异常处理

    下面我将详细讲解如何轻松学习C#的异常处理,包括以下几点: 一、异常处理概述 在编写程序时,不可避免地会遇到各种错误,比如输入错误、内存不足、文件不存在等等,这些错误我们称之为异常。当程序出现异常时,如果不进行处理,程序将会无法正常运行,甚至会出现崩溃的情况。因此,异常处理十分重要。 C#中的异常处理主要通过try-catch-finally语句实现。其中,…

    C# 2023年5月15日
    00
  • asp.net 需要登陆的网站上下载网页源代码和文件

    要下载需要登陆的网站的源代码和文件,我们可以使用以下步骤: 安装浏览器扩展程序 我们可以搜索并安装一些浏览器扩展程序,如“EditThisCookie”或“Get Cookies”,这些扩展程序可以帮助我们获取网站的cookie信息,用以模拟登陆状态。 登陆并获取cookie信息 使用浏览器登陆需要下载的网站,进入登陆状态后,打开扩展程序,获取cookie信…

    C# 2023年5月31日
    00
  • c# 剔除sql语句’尾巴’的五种方法

    接下来我将为大家详细介绍“C#剔除SQL语句‘尾巴’的五种方法”: 一、问题描述 有时候在编写C#程序时,我们需要动态生成SQL语句。但是在动态生成SQL语句中,由于字符串拼接不当可能会导致语句的末尾出现多余的“AND”、“OR”等关键字,这就需要我们对字符串进行处理,去掉这些多余的关键字,以保证SQL语句的正确性。 下面将介绍五种方法来解决这个问题。 二、…

    C# 2023年5月15日
    00
  • c# rsa加密解密详解

    C# RSA加密解密详解 什么是RSA RSA是一种非对称加密算法,通过一个密钥对(公钥和私钥)来实现加密解密。公钥可以公开,用于加密数据;私钥用于解密加密后的数据。 RSA加密解密步骤 随机生成一对RSA密钥(公钥和私钥) 使用公钥对明文进行加密得到密文 使用私钥对密文进行解密得到明文 C#实现RSA加密解密 生成密钥对 在C#中可以使用RSACrypto…

    C# 2023年5月15日
    00
  • 解析C#中不一样的大小写转换

    针对“解析C#中不一样的大小写转换”这一话题,我来给出一份完整攻略。 什么是大小写转换 大小写转换是指将一个字符串中的所有字母(或指定位置的字母)由一个状态(大写或小写)转成另一个状态(小写或大写)的操作。在 C# 中,字符串大小写转换一般用于进行字符串比较,或者对输出结果进行格式化等操作。 C# 中的大小写转换 C# 中提供了多种方法用于字符串大小写转换。…

    C# 2023年6月7日
    00
  • C# 正则表达式常用的符号和模式解析(最新推荐)

    C# 正则表达式常用的符号和模式解析(最新推荐) 简介 正则表达式是面向“字符”模式的,由字符组成的一种检索模式。在C#中,对正则表达式有很好的支持,我们可以使用System.Text.RegularExpressions.Regex类进行正则表达式的匹配和操作。 虽然正则表达式的语法看似复杂,但是当你掌握了其中的一些常用的符号,你会发现正则表达式变得简单易…

    C# 2023年6月6日
    00
  • C#Web应用程序入门经典学习笔记之一

    C#Web应用程序入门经典学习笔记之一学习攻略 C#Web应用程序入门经典学习笔记之一是一本入门级别的C#网络开发学习笔记,主要介绍了通过ASP.NET Core Web应用程序搭建Web应用程序的基础知识和应用。本学习攻略将介绍如何学习这本书并深入理解其内容。 一、先了解一下ASP.NET Core Web应用程序 在开始学习这本书之前,我们需要先简单了解…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部