C#应用程序关闭问题

C#应用程序关闭问题,c#,winforms,application-close,C#,Winforms,Application Close,我希望我的应用程序能够在单击关闭(X)按钮时最小化到系统托盘 只有单击主应用程序窗口上的其他按钮/菜单或单击系统托盘上下文菜单项,它才会关闭 我能使窗户最小化,使托盘关闭 但我面临的问题是,我现在无法关闭应用程序 这是我的代码(无法关闭应用程序): 在按钮中,设置一个字段,例如: bool isClosing; private void quitToolStripMenuItem_Click(object sender, EventArgs e) { isClosing = true;

我希望我的应用程序能够在单击关闭(X)按钮时最小化到系统托盘

只有单击主应用程序窗口上的其他按钮/菜单或单击系统托盘上下文菜单项,它才会关闭

我能使窗户最小化,使托盘关闭

但我面临的问题是,我现在无法关闭应用程序

这是我的代码(无法关闭应用程序):


在按钮中,设置一个字段,例如:

bool isClosing;
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
    isClosing = true;
    Close();
}
并在“关闭”中选中此项:


在按钮中,设置一个字段,例如:

bool isClosing;
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
    isClosing = true;
    Close();
}
并在“关闭”中选中此项:


这是因为它总是点击表单关闭事件处理程序,在该处理程序中取消事件


如果表单已经最小化,则在那里放置一个条件并跳过取消事件,这是因为它总是命中表单关闭事件处理程序,在该处理程序中取消事件


如果表单已经最小化,请在此处放置一个条件并跳过取消事件。我可能会推荐一种稍有不同的方法,您的主要问题是应用程序正在以表单的形式运行,因此您有很多变通方法来确保表单不会关闭


当我使用一个真正存在于系统托盘中的应用程序时,我要做的是创建一个自定义应用程序上下文,这实际上简化了过程。我可能会推荐一种稍有不同的方法,您的主要问题是您的应用程序是以表单的形式运行的,因此您有很多变通方法来确保表单不会关闭


当我使用一个真正存在于系统托盘中的应用程序时,我要做的是创建一个自定义应用程序上下文,这实际上简化了过程。在覆盖关闭行为的位置添加一个标志,并通过检查关闭事件参数上的CloseReason枚举值来覆盖其他退出情况

bool m_NeedClose = false;

private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
    m_NeedClose = true;
    Close();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if(m_NeedClose ||
      (e.CloseReason != CloseReason.UserClosing))
    {
        return;
    }

    e.Cancel = true;
    this.WindowState = FormWindowState.Minimized;
}


在覆盖关闭行为的位置添加标志,并通过检查关闭事件参数上的CloseReason枚举值来覆盖其他退出情况

bool m_NeedClose = false;

private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
    m_NeedClose = true;
    Close();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if(m_NeedClose ||
      (e.CloseReason != CloseReason.UserClosing))
    {
        return;
    }

    e.Cancel = true;
    this.WindowState = FormWindowState.Minimized;
}