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日

相关文章

  • 详解ASP.NET配置文件Web.config

    下面是ASP.NET配置文件Web.config的详细讲解攻略: 什么是Web.config文件? Web.config是ASP.NET应用程序的配置文件,用于存储应用程序的配置信息。配置文件定义了应用程序的行为和特性,包括数据库连接、Session状态、HTTP模块、认证和授权等。 Web.config文件结构 Web.config文件的结构如下所示: &…

    C# 2023年6月3日
    00
  • ASP.NET 生成静态页面 实现思路

    以下是关于“ASP.NET 生成静态页面 实现思路”的完整攻略。 什么是ASP.NET生成静态页面 在ASP.NET中,页面的内容通常是由ASP.NET引擎动态生成的。当用户请求ASPX页面时,服务器端ASP.NET引擎会解析页面中的代码,并将其转换为HTML代码,最终呈现在用户的浏览器中。但是,这种动态生成的方式会增加服务器的负担,并且对于搜索引擎的抓取也…

    C# 2023年6月3日
    00
  • C#实现将DataTable内容输出到Excel表格的方法

    下面是关于“C#实现将DataTable内容输出到Excel表格的方法”的完整攻略。 1.准备工作 在使用C#实现将DataTable内容输出到Excel表格之前,你需要安装一个Excel操作库,常用的有EPPlus和NPOI。 在本攻略中,我们将使用EPPlus作为Excel操作库,您可以通过NuGet包管理器来安装该库。 2.添加引用 安装完成后,我们需…

    C# 2023年5月31日
    00
  • C sharp (#) 数据类型获取方式

    C#是一种强类型语言,类型系统在编译时严格检查,进行类型转换时需要显式地指定类型,因此数据类型获取是编写C#程序中必不可少的一部分。 下面是获取C#数据类型的完整攻略: 1. 声明数据类型变量 在C#中,我们可以使用var关键字来声明变量,这样编译器会根据变量的初始化来推测出变量的类型。需要注意的是,var关键字声明的变量必须在声明时初始化。 示例: var…

    C# 2023年5月31日
    00
  • js操作数据库实现注册和登陆的简单实例

    下面是关于“js操作数据库实现注册和登陆的简单实例”的完整攻略。 1. 准备工作 在开始操作数据库实现注册和登陆之前,需要进行以下准备工作: 安装 Node.js 以及相应的依赖模块。可以通过 npm 来安装依赖,具体的依赖包括 mysql、express、body-parser 等。这里以 mysql 和 express 为例进行说明,安装命令如下: ba…

    C# 2023年5月31日
    00
  • C# 基于NPOI操作Excel

    C#基于NPOI操作Excel 在C#中,我们可以使用NPOI操作Excel文件。NPOI是一个开源的.NET库,它提供了对Microsoft Office的读取和写入支持。在本文中,我们将介绍使用NPOI操作Excel的完整攻略。 安装NPOI 要使用NPOI,我们需要先安装它。我们可以通过NuGet安装NPOI。在Visual Studio中,依次打开”…

    C# 2023年5月31日
    00
  • c#测试本机sql运算速度的代码示例分享

    我来为你详细讲解如何测试本机 SQL 运算的速度。 一、准备工作 安装 SQL Server 数据库,并创建一个数据库。 安装 Visual Studio 并安装 .NET Core SDK。 在 Visual Studio 中创建一个 .NET Core 控制台应用。 二、测试代码 示例1:插入 1000 条数据并计算耗时 代码如下: using Syst…

    C# 2023年6月1日
    00
  • C# Linq的Average()方法 – 计算序列中元素的平均值

    C#中的“Language-Integrated Query”(简称:Linq)是一种强大的查询技术,它提供了一种方便、快速、灵活的方法来查询各种数据源。Linq中有许多方法,其中一个非常常用的方法就是Average()。下面就让我们来详细了解一下Average()方法的使用和实现。 方法概述 Average()方法可以用于计算一个序列的平均数,支持对整数、…

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