私は文書編集者に要約するものを書いています。アプリケーションを閉じるときに、変更を保存するようにユーザーに促す必要があります。これは簡単です。私の質問は、ユーザーにプロンプトを表示せず、保存されていないデータを単に破棄して閉じるのが適切な場合です。
FormClosing イベントでは、CloseReason 列挙型に次が含まれます。
- なし
- Windowsシャットダウン
- MdiFormClosing
- ユーザー閉鎖
- 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;
}
}
}