提示用户,以节省时关闭程序
-
19-08-2019 - |
题
我在写什么可以归结为文件编辑器。当申请是关闭的,我需要来提示用户,以节省的变化。这是容易的。我的问题是,当它是合适 不 提示用户,而不是简单地放弃未保存的数据和关闭。
在FormClosing事件,CloseReason枚举,包括:
- 没有
- WindowsShutDown
- MdiFormClosing
- UserClosing
- TaskManagerClosing
- 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与未保存的文件的地方,这意味着我已经忘记它。
其他提示
我绝对也显示"你想要保存"对话框WindowsShutDown(应用程序可能如已经在该背景对于一些时间和用户忘了它,或者他可能有点击"重新启动"后服务包装不三思等等)。
作为TaskManagerClosing,我会不会显示对话,在这种情况。
我个人喜欢只是接近程序的用户选择接近,如果有任何未保存的文件,在附近的时候,我希望保留备份副本,这些文件,并告知用户有未保存的文件时,他们下一步开发应用程序。
我这样做有几个原因,我喜欢我的应用程序关闭,当我告诉他们关闭和数量两个通过保持一个临时的复制的文件,我更新的所有变化,因为用户的工作上我保护的反对意外事故和关闭的我应用程序。
所以,这种技术的你不需要担心流应用程序已经关闭。
真的CloseReason是一个有争议的问题,不是吗?事实上,你的形式是要走了是什么你想赶上。
现在你需要知道如果应用程序已经处理"保存"的事件。如果是这样,形式可以走了。你已经救了你的文档。但是,如果没有,您可能想要提示用户。
如果你可以验证的数据(即做一串比较或哈比较的文件相比文件中的数据),然后你就会知道如果用户保存有形式的数据。
否则,如果有很多的领域,以及检查每一个是资源的高昂,然后把"isDirty"的标志在你的形式。让Save()方法设置isDirty假,而每一个其他领域改变设置为真实的。
然后,在formClosing,所有你需要的是:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (isDirty)
{
DialogResult R = MessageBox.Show(this, "Save changes?", "Save Changes",
MessageBoxButtons.YesNoCancel);
if (R == DialogResult.Yes)
{
this.Save();
} else if (R == DialogResult.Cancel)
{
e.Cancel = true;
}
}
}
我认为,即使是 TaskManagerClosing
可以使用的一种提示,以保存。如果你的应用是应对通常情况下,关闭它通过任务主管机构不应同任何其他方式的关闭。如果它是红的,它不管你是什么onClose处理程序做的--它将永远不会到达那里。
我同意@杰里,在于它是更重要的是避免提到保存,如果数据没有改变,因为最后一个保存。我通常使用一个简单的'改变标志,其获取设置任何编辑的行动,清除在保存和装载。