我的表单关闭时执行代码

时间:2013-07-12 05:47:38

标签: c# .net winforms

我的程序在注册表运行时对其进行了一些更改,如果它们没有正确回滚,则可能会导致用户出现一些问题。例如,他们可能无法使用他们的互联网连接。

所以我需要确保当他们关闭应用程序时,我将所有内容恢复正常。要做到这一点,我需要知道他们何时按下了表单的“关闭”按钮。我怎样才能做到这一点?有没有我可以处理的事件?

3 个答案:

答案 0 :(得分:2)

我认为您需要的不是访问关闭按钮,而是访问在关闭表单时触发的事件

this之前的SO帖子中摘取,您可能需要的是:

void FormClosed(object sender, FormClosedEventArgs e)
{
    // do something useful
}

答案 1 :(得分:2)

这里有更多可能性。

1)使用表格的FormClosing事件:

private void form_FormClosing(object sender, FormClosingEventArgs e) {
    if (e.CloseReason == CloseReason.UserClosing) {   // User clicked 'X' button
         if (someThing)  e.Cancel = true;             // Disable Form closing
    }
}

2)您也可以通过将ControlBox设置为false来隐藏“X”按钮。但这也会隐藏最小化和最大化按钮。

3)这仅禁用“X”按钮。把它放在你的表格中。

    private const int CP_NOCLOSE_BUTTON = 0x200;

    protected override CreateParams CreateParams {
        get {
            new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
            CreateParams cp = base.CreateParams;
            cp.ClassStyle |= CP_NOCLOSE_BUTTON;
            return cp;
        }
    }

答案 2 :(得分:2)

您可以在FormClosing之前订阅一个名为FormClose的活动,并允许您在表单关闭之前验证/更改所需的设置

public Form1()
{
    InitializeComponent();
    FormClosing += Form1_FormClosing;
}

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   // Reset values
}