C# 如何在FormClosing事件中显示MessageBox以提示取消?

C# 如何在FormClosing事件中显示MessageBox以提示取消?,c#,winforms,C#,Winforms,我正在使用此代码,但它不起作用,我做错了什么 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes) {

我正在使用此代码,但它不起作用,我做错了什么

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {
        MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
    }
    else
    {
        e.Cancel = true;
        this.Activate();
    }
}

事件处理程序是否附加到表单?要进行检查,请转到表单属性,然后转到事件选项卡,查看Form1\u FormClosing是否针对FormClosing事件存在。

事件处理程序是否附加到表单?要进行检查,请转到“表单属性”,然后转到“事件”选项卡,查看Form1\u FormClosing是否针对FormClosing事件存在。

如果此表单是使用FormName.ShowDialog打开的,则在FormClosing事件中,设置e.Cancel=True是不够的。
您需要将FormName.DialogResult设置为DialogResult。无如

上明确记录的那样。如果此表单是使用FormName.ShowDialog打开的,则在FormClosing事件中,设置e.Cancel=True是不够的。
您需要将FormName.DialogResult设置为DialogResult.None,正如

中明确记录的那样,我猜您是从某个地方复制了此代码,而忘记了实际订阅FormClosing事件。在C语言中,VB.NET使用Handles关键字来避免类似的错误。选择表单,单击属性窗口中的闪电图标,然后双击表单关闭以添加订阅事件的代码

也就是说,像这样编写代码实际上是没有意义的。事件用于其他代码获取通知,类不必侦听自己的事件。在Winforms中,每个事件都由受保护的OnXxxx方法触发,您可以覆盖该方法。您可以剪切并粘贴下面的代码,然后落入成功的陷阱,它不需要任何额外的代码,如事件订阅代码。最重要的是,它首先优先考虑定制事件处理程序,这类代码您还不知道,应该首先尝试处理通知

    protected override void OnFormClosing(FormClosingEventArgs e) {
        base.OnFormClosing(e);
        if (!e.Cancel) {
            if (MessageBox.Show("Really?", "Close", MessageBoxButtons.YesNo) != DialogResult.Yes) {
                e.Cancel = true;
            }
        }
    }

我猜你是从某个地方复制了这段代码,却忘了订阅FormClosing事件。在C语言中,VB.NET使用Handles关键字来避免类似的错误。选择表单,单击属性窗口中的闪电图标,然后双击表单关闭以添加订阅事件的代码

也就是说,像这样编写代码实际上是没有意义的。事件用于其他代码获取通知,类不必侦听自己的事件。在Winforms中,每个事件都由受保护的OnXxxx方法触发,您可以覆盖该方法。您可以剪切并粘贴下面的代码,然后落入成功的陷阱,它不需要任何额外的代码,如事件订阅代码。最重要的是,它首先优先考虑定制事件处理程序,这类代码您还不知道,应该首先尝试处理通知

    protected override void OnFormClosing(FormClosingEventArgs e) {
        base.OnFormClosing(e);
        if (!e.Cancel) {
            if (MessageBox.Show("Really?", "Close", MessageBoxButtons.YesNo) != DialogResult.Yes) {
                e.Cancel = true;
            }
        }
    }

你说它不工作是什么意思?它应该做什么?从我所能收集到的信息来看,它确实做到了代码所说的它应该做的事情?请尝试一下,我使用的代码是错误的,或者没有正确的语言,并按照我想要的方式使用它。谢谢,这些链接很好。你说它不工作是什么意思?它应该做什么?从我所能收集到的信息来看,它确实做到了代码所说的它应该做的事情?请尝试一下,我使用的代码是错误的,或者没有正确的语言,并按照我想要的方式使用它。谢谢,这些链接很好。谢谢,代码就像我想要的那样工作!谢谢你的输入。谢谢,代码就像我想要的那样工作!谢谢你的意见。