C#Windows窗体关闭事件
我正在处理C#Windows窗体关闭事件,c#,winforms,formclosing,C#,Winforms,Formclosing,我正在处理FormClosing事件 DialogResult dg = MessageBox.Show("Do you want to save changes?", "Closing", MessageBoxButtons.YesNoCancel); if (dg == DialogResult.Yes) { saveToolStripMenuItem_Click(sender, e); } else if (dg == DialogResult.Cancel) { e.C
FormClosing
事件
DialogResult dg = MessageBox.Show("Do you want to save changes?", "Closing", MessageBoxButtons.YesNoCancel);
if (dg == DialogResult.Yes)
{
saveToolStripMenuItem_Click(sender, e);
}
else if (dg == DialogResult.Cancel)
{
e.Cancel = true;
}
当我单击X关闭表单时,此代码工作正常:
以上是100%正确的,但是,一旦出现“保存”对话框,当我单击“保存”对话框中的“取消”按钮时,它仍然会关闭表单-它也会返回?正如Matthew Watson所建议的,您可以创建一个帮助方法。以下是它的简短版本:
private DialogResult SaveStuff()
{
return new SaveFileDialog().ShowDialog();
}
这可以在saveToolStripMenuItem\u单击事件中使用,如下所示:
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult dr = SaveStuff();
if (dr == DialogResult.OK)
{
// ...
}
}
但最重要的是,您可以在FormClosing
事件中使用它,并检查返回值:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult dg = MessageBox.Show("Do you want to save changes?", "Closing", MessageBoxButtons.YesNoCancel);
if (dg == DialogResult.Yes)
{
if (SaveStuff() == DialogResult.Cancel)
{
e.Cancel = true;
}
}
else if (dg == DialogResult.Cancel)
{
e.Cancel = true;
}
}
这样,当点击SaveFileDialog
不调用saveToolStripMenuItem\u单击(发件人,e)时,表单应保持未关闭状态代码>直接。编写一个包含逻辑的方法,并从这里和saveToolStripMenuItem\u Click()
处理程序调用它。然后,您可以使该方法返回bool,以指示保存对话框是否已取消,并做出相应的响应。“当我单击保存对话框内的取消按钮时,它仍会关闭表单”您确定是指取消吗?因为当我尝试您的代码并单击“取消”时,表单不会关闭,但当我单击“否”时,表单会关闭,因为您的代码中没有处理该情况的逻辑。这是FormClosing事件中的代码吗?您好,Mong Zhu,提示“是,否,取消”中的“取消”正常工作。我指的“取消”是“保存”对话框的“取消”。我看不到“保存”对话框的任何代码。如果你有问题,为什么不发布相关代码?