Я согласен с @Jerry в том, что более важно избегать запроса на сохранение, если данные не изменились с момента последнего сохранения. Я обычно использую простой «измененный» флаг, который устанавливается при любом действии редактирования и очищается при сохранении и загрузке.
у то, что сводится к редактору документов. Когда приложение закрывается, мне нужно предложить пользователю сохранить изменения. Это достаточно просто. Мой вопрос, когда это уместноне предложить пользователю, а вместо этого просто отбросить несохраненные данные и закрыть.
В событии FormClosing перечисление CloseReason включает:
НиктоWindowsShutDownMdiFormClosingUserClosingTaskManagerClosingFormOwnerClosingApplicationExitCallЯ считаю, что 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;
}
}
}