c#在表单关闭时管理MessageBox

c#在表单关闭时管理MessageBox,c#,forms,event-handling,messagebox,sender,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); }

我有一个带有子窗体的父窗体,它的父窗体通过单击按钮调用

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

它们工作得很好,但当我试图关闭程序时,通过关闭父窗体并打开子窗体,父窗体上的关闭事件也会触发子窗体上的messagebox,因此我必须双击“Yes I want 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;
            }
        }
    }

希望这对任何人都有帮助。

如果messagebox showedI希望单独管理这两个事件,您可以使用全局布尔变量,如“closeappasked”,并将anywhere设置为true。您的问题不可复制。我制作了两个表单,从另一个表单调用1,在它们的
表单关闭事件中使用了您的代码。。。但它实际上可以像你想要的那样工作。我发布的代码是原始代码的一个更简单的版本。。不知道为什么你的代码有效而我的代码无效。。但我想我需要处理发件人,并检查发件人是自己的表单还是其他表单。。
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;              
        }
    }
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;
            }
        }
    }