通过调用按钮单击事件来处理 winForm 中的关闭事件会导致两种不同的行为

匿名
2024-05-22T06:07:46.1633333+00:00

我有一个简单的 winForm,想要使用关闭事件并将用户重定向到注销过程。注销过程由按钮单击事件处理。当用户按下注销按钮并选择“否”时,它将保留在页面上,用户可以继续使用该应用程序。在关闭事件中,我调用了注销按钮事件方法,但是当用户选择“否”时,窗口关闭并且程序仍在运行。我想知道发送到方法的事件是否不同,或者基本上是为什么会发生?

    private void btnLogout_Click(object sender, EventArgs e) {

    DialogResult result = MessageBox.Show("Do you want to logout?", "Logout",  MessageBoxButtons.YesNo);

    if (result == DialogResult.Yes) {
        this.Visible = false;
        frmMain f = new frmMain();
        f.Show();
    }
    else {
        return;
    }
} // end logout

private void Form2_FormClosing(object sender, FormClosingEventArgs e) {
    btnLogout_Click(sender, e);
}

Note:此问题总结整理于: Handling Closing event in winForm by calling a button click event results in two different behaviour

开发人员技术 | Windows 窗体
开发人员技术 | C#
开发人员技术 | C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
0 个注释 无注释
{count} 票

问题作者接受的答案
  1. Hui Liu-MSFT 48,706 信誉分 Microsoft 外部员工
    2024-05-22T08:45:43.9733333+00:00

    首先,FormClosing 事件在窗体关闭时发生。关闭表单时,将释放该表单,释放与表单关联的所有资源。 因此,在 FormClosing 事件中,调用注销按钮事件方法,即使用户选择“否”,窗口也会关闭,程序仍在运行。 您可以将 FormClosingEventArgs 的 Cancel 属性设置为 true,以取消窗体的闭合。

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)  
    {  
        button1_Click( sender, e);  
        e.Cancel = true;     
    }  
    

    这是您可以参考的有用文档


    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。