Winforms Form::Close方法、FormClosing事件和CloseReason事件参数。设置自定义关闭原因? 这是一个类似的问题,但是我发现当转置到C++时,答案是不起作用的。FormClosing事件总是由用于关闭表单的任何方法触发,因此_programmaticClose的值在退出时始终为false。此外,调用基函数OnFormCLosing会导致无限循环

Winforms Form::Close方法、FormClosing事件和CloseReason事件参数。设置自定义关闭原因? 这是一个类似的问题,但是我发现当转置到C++时,答案是不起作用的。FormClosing事件总是由用于关闭表单的任何方法触发,因此_programmaticClose的值在退出时始终为false。此外,调用基函数OnFormCLosing会导致无限循环,winforms,c++-cli,formclosing,Winforms,C++ Cli,Formclosing,我需要区分应用按钮、取消按钮、“X”、Alt+F4等属性 FormClosingEventArgs.CloseReason 是只读的,因此无法在触发关闭事件后手动更改 您需要做的是定义自己的CloseReason枚举 enum CloseReason { Apply, Cancel, X, AltF4 // etc... } 并在表单中添加两个变量: private: bool forceClose = false; CloseReason closeReason;

我需要区分应用按钮、取消按钮、“X”、Alt+F4等属性

FormClosingEventArgs.CloseReason
是只读的,因此无法在触发关闭事件后手动更改

您需要做的是定义自己的CloseReason枚举

enum CloseReason
{
    Apply, Cancel, X, AltF4 // etc...
}
并在表单中添加两个变量:

private:
    bool forceClose = false;
    CloseReason closeReason;
void ApplyButton_Click(Object sender, EventArgs e)
{
    closeReason = CloseReason::Apply;
    forceClose = true;
    this->Close();
}
然后在FormClosing方法中,编写以下代码(这里我假设事件触发一个名为Form1\u FormClosing的方法):

因此,默认情况下,当用户试图关闭表单时,表单实际上不会关闭

现在,对于关闭表单的每个“可选”方法,您需要编写另一个事件处理程序,告诉表单如何关闭,以及在适当的情况下实际关闭表单。例如,如果有一个名为ApplyButton的按钮要关闭表单:

private:
    bool forceClose = false;
    CloseReason closeReason;
void ApplyButton_Click(Object sender, EventArgs e)
{
    closeReason = CloseReason::Apply;
    forceClose = true;
    this->Close();
}

对其他结账方法重复这种格式。当您的用户使用“X”关闭表单时,只会调用FormClosing方法,因此如果您希望发生任何特殊情况,您需要在该方法中编写额外的代码。

最后,根据您的回答,我发现最简单的方法是默认将_programmaticClose(或等效)设置为false。然后,当且仅当按下应用按钮时,我将其设置为true。所以根本不需要关闭表单。