处理表单Close事件的两种不同方式

时间:2016-07-29 13:17:11

标签: c# winforms events event-handling

我的WinForm上有一个保存按钮,用于保存表单信息,然后使用this.Close()语句关闭表单。

然而,有另一种关闭表单的方法,那就是X按钮。

我正在使用FormClosing事件在表单关闭之前提出问题。

private void EmailNewsletter_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr = MsgBox.Show("Are you sure you want to dimiss this newsletter?", "Dismiss Newsletter", MsgBox.Buttons.YesNo, MsgBox.Icon.Question);
    if (dr == System.Windows.Forms.DialogResult.Yes)
    {
        this.Newsletter = null;
    }
    else
    {
        e.Cancel = true;
    }
}

但处理关闭表单的方式取决于表单的关闭方式。如果用户点击保存按钮,表单应该没有问题就会关闭。只有当用户点击X按钮时,才会询问问题。

如何让我的表单知道 Close 命令的来源?

1 个答案:

答案 0 :(得分:1)

一个简单的布尔标志应该可以解决这个问题:

private bool saveClicked = false;
private void btnSave_click(object sender, EventArgs e)
{
      saveClicked = true;
}
private void EmailNewsletter_FormClosing(object sender, FormClosingEventArgs e)
{
    if(saveClicked)
         return;

    DialogResult dr = MsgBox.Show("Are you sure you want to dimiss this newsletter?", "Dismiss Newsletter", MsgBox.Buttons.YesNo, MsgBox.Icon.Question);

    if (dr == System.Windows.Forms.DialogResult.Yes)
    {
        this.Newsletter = null;
    }
    else
    {
        e.Cancel = true;
    }
}