Неужели CloseReason - это спорный вопрос, не так ли? Тот факт, что ваша форма исчезает, это то, что вы пытаетесь поймать.
Теперь вам нужно знать, обработала ли ваше приложение событие «save». Если это так, форма может уйти. Вы сохранили свой документ. Но если нет, вы можете предложить пользователю.
Если вы можете быстро проверить данные (т. Е. Сравнить строки или сравнить хэш-функции в документе с данными в файле), то вы узнаете, сохранил ли пользователь данные формы.
В противном случае, если есть много полей, и проверка каждого из них запрещает использование ресурсов, тогда поставьте флаг «isDirty» на вашей форме. Пусть метод Save () устанавливает для isDirty значение false, а любое другое изменение поля устанавливает для него значение true.
Затем, в форме закрытия, все, что вам нужно, это:
</p>
<pre><code>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;
}
}
}