形成关闭事件

本文关键字:事件 | 更新日期: 2023-09-27 17:56:16

我在 c# 中关闭应用程序时遇到问题。当我点击关闭按钮时,它会显示两次或更多次的消息框。我该怎么办?

private void home_FormClosed(object sender, FormClosedEventArgs e)
{
    DialogResult dialog = MessageBox.Show("Are you sure you want to really exit ? ", 
                            "Exit", 
                             MessageBoxButtons.YesNo, 
                             MessageBoxIcon.Question);
    if (dialog == DialogResult.Yes)
    {
        System.Windows.Forms.Application.Exit();
    }
    else if (dialog == DialogResult.No)
    {
        this.Show();
    }
}

形成关闭事件

使用Form1_FormClosing事件,也不要使用这样的Application.Exit()

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    var x = MessageBox.Show("Are you sure you want to really exit ? ", 
                             "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (x == DialogResult.No) 
    {
       e.Cancel = true;
    }
    else
    {
      e.Cancel = false;
    }
}

或者像这样:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   e.Cancel = MessageBox.Show("Are you sure you want to really exit ? ", 
              "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No;
}
您应该

使用 Form.FormClosing 事件而不是 FormClosed 事件。 在参数中,您可以找到一个字段e.Cancel 。 通过将其设置为 false,您可以保持表单打开状态

您可以通过检查是否已从FormClosing事件中调用Application.Exit()来避免多个提示:

    void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason != CloseReason.ApplicationExitCall)
        {
            DialogResult dialog = MessageBox.Show("Are you sure you want to really exit ? ", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dialog == DialogResult.Yes)
            {
                System.Windows.Forms.Application.Exit();
            }
            else if (dialog == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }

请改用表单关闭事件。

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        var confirmation = MessageBox.Show("Sure to close form", "Confirm", MessageBoxButtons.YesNo);
        if (confirmation == System.Windows.Forms.DialogResult.No)
        {
             e.Cancel = true; //Even cancelled, form will not get closed now
        }
    }