我有一个“登录”表单,我需要知道用户是否按下了表单上的X按钮或将他带到新表单的按钮。如果用户使用Alt + F4或X按钮关闭了程序,则必须关闭程序。
我正在尝试使用FormClosing事件来检查用户是否按下X或登录。
private void LogIn_FormClosing(object sender, FormClosingEventArgs e)
{
if (string.Equals((sender as Button).Name, @"loginButton"))
{
//some code
}
else
{
Close();
}
}
答案 0 :(得分:1)
FormClosing 事件处理程序收到一个 FormClosingEventArgs 参数,该参数包含属性 CloseReason ,但是在您的上下文中,这还不够。
实际上,在两种情况下(ALT + F4 / X-Click或ButtonClick),该参数都将包含等于 UserClosing 的 CloseReason 。
我建议您采用一种简单的解决方法。在按钮单击处理程序中(应在窗体上调用关闭动作,而不是在formclosing事件处理程序本身上),将某些内容添加到窗体的Tag属性中,如下所示:
#include <vector>
#include <boost/align/aligned_allocator.hpp>
template <typename T>
using aligned_vector = std::vector<T, boost::alignment::aligned_allocator<T, 16>>;
// 16 bytes aligned allocation
现在在FormClosing事件处理程序中很容易检查此属性
private void Button1_Click(object sender, EventArgs e)
{
this.Tag = "ClosedByUser";
this.Close();
}