c#管理表单关闭时的消息框

时间:2017-03-14 14:26:33

标签: c# forms event-handling messagebox sender

我有一个带有子表单的父表单,由父表单点击按钮调用。

private void button3_Click(object sender, EventArgs e)
    {
        if (Application.OpenForms.OfType<Form2>().Count() < 1 )
        {
            Form2 form2 = new Form2();
            form2.Show(this);
        }
    }

在两个表单(父表单和子表单)上,我都有一个消息框来确认当前表单的关闭。

void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {         
        if (MessageBox.Show("Do you want to exit?",
                           "Close application",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Information) == DialogResult.No)
        {
            e.Cancel = true;
        }         
    }

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        //MessageBox.Show("You pressed: " + sender);

        if (MessageBox.Show("Do you want to close the child form?",
                           "Child form closing",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Information) == DialogResult.No)
        {
            e.Cancel = true;              
        }
    }

它们运行良好但是当我尝试关闭程序时,通过关闭打开子项的父表单,父表单上的结束事件也会触发子项上的消息框,所以我要单击“是的我想要”关闭“双倍:一次关于孩子一个人和另一个孩子......”

如何管理这种情况,因此通过关闭父表单退出打开一个子表单的程序?

1 个答案:

答案 0 :(得分:0)

我通过在每个FormClosing事件中添加close原因找到了解决方案:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {          
        if (e.CloseReason == CloseReason.UserClosing)
        {
            if (MessageBox.Show("Do you want to exit?",
                           "Closing application",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Information) == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }

希望这可以帮助任何人。