取消关闭C#表格

时间:2013-03-01 23:13:56

标签: c#

我的程序有两种关闭方式,一种是右上角的“X”,另一种是“退出”按钮。现在,当满足某个条件时按下其中任何一个时,会弹出一条消息,通知用户他们尚未保存。如果他们DID保存,则不会弹出消息并且程序正常关闭。现在,当弹出消息时,用户将获得一个带有“是”和“否”按钮的MessageBox。如果按“是”,则程序需要保存。如果按“否”,程序需要取消用户按下“X”或“退出”按钮时启动的关闭事件。

这样做的最佳方式是什么?

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    TryClose();
}

private void TryClose()
{
    if (saved == false)
    {
        //You forgot to save
        //Turn back to program and cancel closing event
    }
}

7 个答案:

答案 0 :(得分:4)

FormClosingEventArgs包含Cancel属性。只需设置e.Cancel = true;即可阻止表单关闭。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (!saved)
        e.Cancel = true;
}

编辑以回应评论:

由于您的目标是允许使用相同的“保存方法”,因此我会将其更改为成功时返回bool

private bool SaveData()
{
     // return true if data is saved...
}

然后你可以写:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // Cancel if we can't save
    e.Cancel = !this.SaveData();
}

您的按钮处理程序等仍然可以根据需要调用SaveData()

答案 1 :(得分:1)

这将满足您的需求:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = !TryClose();
}

private bool TryClose()
{
    return DialogResult.Yes == MessageBox.Show("Are you sure?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
}

答案 2 :(得分:0)

使用事件args的Cancel property,将其设置为true以取消。

答案 3 :(得分:0)

要取消结束事件,只需在Cancel实例上将true属性设置为FormClosingEventArgs

if (!saved) {
  // Message box
  e.Cancel = true;
}

答案 4 :(得分:0)

您可以从退出按钮调用关闭。然后像其他人所说的那样处理Forms.FormClosing事件中的关闭。这将处理从“X”

退出按钮单击和表单关闭

答案 5 :(得分:0)

覆盖OnFormClosing:

 protected override void OnFormClosing(FormClosingEventArgs e)
 {
    if (saved == true)
    {
       Environment.Exit(0);
    }
    else /* consider checking CloseReason: if (e.CloseReason != CloseReason.ApplicationExitCall) */
    {
       //You forgot to save
       e.Cancel = true;
    }
    base.OnFormClosing(e);
 }

答案 6 :(得分:0)

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = !TryClose();
    }

    private bool TryClose()
    {
        if (!saved)
        {
            if (usersaidyes)
            {
                // save stuff
                return true;
            }
            else if (usersaidno)
            {
                // exit without saving
                return false;
            }
            else
            {
                // user cancelled closing
                return true;
            }
        }
        return true;
    }