.net - 关闭应用程序时提示用户保存

标签 .net winforms shutdown application-shutdown

我正在将归结为文档编辑器。当应用程序关闭时,我需要提示用户保存更改。这很容易。我的问题是什么时候不提示用户,而只是丢弃未保存的数据并关闭,是否合适?

在FormClosing事件中,CloseReason枚举包括:

  • Windows关机
  • MdiForm关闭
  • UserClosing
  • TaskManager关闭
  • FormOwnerClosing
  • ApplicationExitCall

  • 我认为WindowsShutDown和TaskManagerClosing不应引起“保存更改?”提示出现,以防止应用程序挂起并显示该提示。

    这是标准做法吗,还是我应该在这里做其他事情吗?

    为了清楚起见,下面是代码:
    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
    
        if (!(e.CloseReason == CloseReason.WindowsShutDown || e.CloseReason == CloseReason.TaskManagerClosing)
                && this.ChangesPending())
        {
            switch (MessageBox.Show(this, "Save changes?", "Save Changes", MessageBoxButtons.YesNoCancel))
            {
                case DialogResult.Yes:
                    this.Save();
                    break;
                case DialogResult.No:
                    // Do nothing
                    break;
                case DialogResult.Cancel:
                    e.Cancel = true;
                    break;
            }
        }
    }
    

    最佳答案

    我认为TaskManagerClosing应该是不提示的唯一原因(如果有的话)。就个人而言,我想在出现WindowsShutDown时得到提示。如果要关闭Windows并保存未保存文档,则表示我已经忘记了。

    关于.net - 关闭应用程序时提示用户保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462903/

    相关文章:

    c# - 由于 DataGridViewImageColumn,DataGridView 在默认错误对话框中抛出异常

    Azure,没钱时关闭所有虚拟机

    .net - 强制关闭 COM 端口

    c# - 事件查看器中的行号

    .net - 在 .NET 中解析分隔的 CSV

    c# - 有什么办法可以让MemoryCache过期暂停一段时间?

    c# - 将数据从文本框存储到 appconfig 中

    c# - 表单从左到右调整大小的动画

    windows - 如何在 Windows 上通过 CMD Prompt 发送关机命令以进行处理

    linux - 如何在 linux 中将 Perl 脚本作为系统守护进程运行?