C#Windows窗体FormClosing事件

时间:2017-01-30 09:55:46

标签: 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.Cancel = true;
}

当我点击X关闭表单时,此代码完美无缺:

  1. CANCEL将返回表单而不做任何更改
  2. NO会立即关闭表格
  3. YES将打开保存对话框
  4. 上面是100%正确,但是,一旦出现保存对话框,当我点击保存对话框内的取消按钮时,它仍然会关闭表单 - 它还应该返回?

1 个答案:

答案 0 :(得分:2)

正如Matthew Watson已经建议的那样,你可以创造一种帮助方法。这是它的简短版本:

private DialogResult SaveStuff() 
{
    return new SaveFileDialog().ShowDialog();
}

这可以在saveToolStripMenuItem_Click事件中使用,如下所示:

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

上的取消按钮时,表格应保持未闭合状态