Winforms Form::Close方法、FormClosing事件和CloseReason事件参数。设置自定义关闭原因? 这是一个类似的问题,但是我发现当转置到C++时,答案是不起作用的。FormClosing事件总是由用于关闭表单的任何方法触发,因此_programmaticClose的值在退出时始终为false。此外,调用基函数OnFormCLosing会导致无限循环
我需要区分应用按钮、取消按钮、“X”、Alt+F4等属性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;
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。所以根本不需要关闭表单。