Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关闭窗体时执行代码_C#_.net_Winforms - Fatal编程技术网

C# 关闭窗体时执行代码

C# 关闭窗体时执行代码,c#,.net,winforms,C#,.net,Winforms,我的程序在运行时对注册表进行了一些更改,如果没有正确回滚,可能会给用户带来一些问题。例如,他们可能无法使用Internet连接 因此,我需要确保当他们关闭应用程序时,我会让一切恢复正常。为此,我需要知道他们何时按下表单的关闭按钮。我该怎么做?是否有我可以处理的事件?我认为您需要的不是访问关闭按钮,而是访问表单关闭时触发的事件 摘自上一篇SO帖子,您可能需要的是: void FormClosed(object sender, FormClosedEventArgs e) { // do s

我的程序在运行时对注册表进行了一些更改,如果没有正确回滚,可能会给用户带来一些问题。例如,他们可能无法使用Internet连接


因此,我需要确保当他们关闭应用程序时,我会让一切恢复正常。为此,我需要知道他们何时按下表单的关闭按钮。我该怎么做?是否有我可以处理的事件?

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

摘自上一篇SO帖子,您可能需要的是:

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

这里有更多的可能性

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;
        }
    }

您可以订阅一个名为
FormClosing
的事件,该事件在
FormClose
之前触发,允许您在表单关闭之前验证/更改所需的设置

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

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