C# 使用X或“已创建”按钮关闭窗体

C# 使用X或“已创建”按钮关闭窗体,c#,winforms,C#,Winforms,我有一个登录表单,我需要知道用户是按了表单上的X按钮,还是按了将他带到新表单的按钮。如果用户使用Alt+F4或X按钮关闭程序,则必须关闭程序 我尝试使用FormClosing事件来检查用户是按了X还是登录 private void LogIn_FormClosing(object sender, FormClosingEventArgs e) { if (string.Equals((sender as Button).Name, @"loginButton"))

我有一个登录表单,我需要知道用户是按了表单上的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();
        }
    }
FormClosing事件处理程序接收包含属性CloseReason的FormClosingEventArgs参数,但在您的上下文中,这还不够。
实际上,在这两种情况下(ALT+F4/X-Click或ButtonClick),参数都将包含一个与UserClosing相等的CloseReason

我建议你一个简单的解决办法。在button click处理程序中(您应该在表单上调用close操作,而不是在formclosing事件处理程序本身上),向表单的Tag属性添加如下内容:

private void Button1_Click(object sender, EventArgs e)
{
    this.Tag = "ClosedByUser";
    this.Close();
}
现在,在FormClosing中,检查此属性很简单

private void LogIn_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.Tag != null)
    {
        // Button clicked
    }
    else
    {
        // other reasons
        // Dp not call Close here, you are already closing 
        // if you don't set e.Cancel = true;
    }
}
检查事件参数的属性。