检查C#WinForm是否已关闭

时间:2012-02-22 12:45:29

标签: c# exit formclosing

我在C#Windows窗体上使用FormClosing事件要求用户在退出之前进行确认。如果用户使用表单窗口一角的红叉特意关闭表单,我只希望显示此消息。当我手动关闭或隐藏表单时,我不希望显示确认消息(例如,手动调用form.Close())。

是否可以检查用户是否按下红十字?

感谢。

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

如果您以编程方式拨打this.Close()或让用户点击X,那么两者都会获得CloseReason.UserClosing,因此这不是有效的检查。

请参阅以下代码,了解" hacky"基本上调用this的解决方案。如果OnClosing传递null参数,则关闭。

private void button1_Click(object sender, EventArgs e)
{
    OnClosing(null);
}
protected override void OnClosing(CancelEventArgs e)
{
    if (e == null)
    {
        // Raise your Message or Cancel
        this.Close();
    }
    else
    {
        base.OnClosing(e);
    }
}

答案 2 :(得分:0)

您可以查看传递给CloseReason事件的事件参数的FormClosing属性。

答案 3 :(得分:0)

使用FormClosing事件处理程序并输入以下简单代码:

        if (MessageBox.Show(this, "Do you want to close the Application?", "Exit App", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
        {
            e.Cancel = true;
        }
        else
        {
            //close app code
        }

答案 4 :(得分:0)

开箱即用,没有一种简单的方法来检测这种行为。虽然有一个“FormClosingEventArgs.CloseReason”属性,您可以检查FormClosing事件,它将不会真正具体说明它关闭的原因。

MSDN开始,'UserClosing'枚举值的描述​​为:

  

用户正在通过用户界面(UI)关闭表单   例如,单击窗体窗口上的“关闭”按钮,选择   从窗口的控制菜单关闭,或按ALT + F4。

因此,您可以看到列出了很多原因,但没有具体说明。

我认为您要做的最好的事情是删除窗口边框(包括按钮)并在其上放置自己的关闭按钮,并捕获其click事件以获得所需的行为。我之前已经看过它,它确实有效,虽然它看起来不像普通的窗口按钮那么“漂亮”。