保存されていないデータがある場合にプログラマーがイベントを処理する場合、プログラムを終了するとき、プログラマーはFormClosing
、操作を保存するか、保存しないか、またはキャンセルするかを尋ねる保存ダイアログを表示できます。
FormClosing イベントでヒットした場合、Cancel
設定した操作をキャンセルしますe.Cancel = true;
。これで問題ありません。ただし、メニューでユーザーがボタンを押すと、イベントではなくメニュー項目イベントを処理するため、実行するExit
代わりに同じことが発生するe.Cancel = true;
はずです。return;
Click
FormClosing
現在、私はコードをほとんど複製しており、これを処理してエレガントでわかりやすい方法で複製を回避する方法があるかどうか疑問に思っていました。
private void FrmEditorFormClosing(object sender, FormClosingEventArgs e)
{
if (NeedsToSave)
{
DialogResult saveChangesDialog =
MessageBox.Show("There are unsaved changes. Save now?",
"Xml Editor", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (saveChangesDialog == DialogResult.Yes)
{
Save();
}
else if (saveChangesDialog == DialogResult.Cancel)
{
e.Cancel = true; // Only difference
}
}
}
private void ExitToolStripMenuItemClick(object sender, EventArgs e)
{
if (NeedsToSave)
{
DialogResult saveChangesDialog =
MessageBox.Show("There are unsaved changes. Save now?",
"Xml Editor", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (saveChangesDialog == DialogResult.Yes)
{
Save();
}
else if (saveChangesDialog == DialogResult.Cancel)
{
return; // Only difference
}
}
Close();
}