退出程序时,如果程序员处理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();
}