C# 使用ContextMenuStrip终止应用程序

C# 使用ContextMenuStrip终止应用程序,c#,system-tray,contextmenustrip,C#,System Tray,Contextmenustrip,当我单击表单关闭按钮(clasic red X按钮)时,我想在系统托盘中隐藏我的应用程序。我提供了这个代码 private void Ana_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); } 因此,应用程序仍在系统托盘中运行。我添加了一个ContextMenuStrip,当

当我单击
表单关闭
按钮(clasic red X按钮)时,我想在系统托盘中隐藏我的应用程序。我提供了这个代码

    private void Ana_FormClosing(object sender, FormClosingEventArgs e) 
    {            
        e.Cancel = true; 
        this.Hide();          
    }
因此,应用程序仍在
系统托盘中运行。我添加了一个
ContextMenuStrip
,当我右键单击鼠标
ContextMenuStrip
时,会出现一个
Close
按钮,但当我单击该
Close
按钮时,应用程序仍在运行。 我想在单击该
Close
按钮时终止应用程序。这是我的密码:

   private void kapatToolStripMenuItem_Click(object sender, EventArgs e) //Close
   {
        DialogResult ext;
        ext = MessageBox.Show("Çıkmak İstediğinizden Emin misiniz?", "Onay", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        if (ext == DialogResult.Yes)
        {
            Application.Exit();                
        }       
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        this.Show();                      
    }

调用
Application.Exit()
实际上会尝试关闭所有表单,并且由于
FormClosing
已硬编码为取消,因此无法完成任务

当前结构的一个选项是创建
AllowClose
标志。这可能是表单的属性,也可能是全局静态值

例如:

//in your form
public bool AllowClose {get;set;}

private void Ana_FormClosing(object sender, FormClosingEventArgs e) 
{
    if(!AllowClose)
    {            
        e.Cancel = true; 
        this.Hide();  
    }        
}

//in your context menu event
private void kapatToolStripMenuItem_Click(object sender, EventArgs e) //Close
{

    DialogResult ext;
    ext = MessageBox.Show("Çıkmak İstediğinizden Emin misiniz?", "Onay", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (ext == DialogResult.Yes)
    {
        this.AllowClose = true;
        Application.Exit();
    }       
}
试试这个

bool isClosing = false;


 private void Ana_FormClosing(object sender, FormClosingEventArgs e) 
    {            
        if(!isClosing)
        {
           e.Cancel = true; 
           this.Hide();          
        }
    }




private void kapatToolStripMenuItem_Click(object sender, EventArgs e) //Close
    {
        DialogResult ext;
        isClosing = true;

        ext = MessageBox.Show("Çıkmak İstediğinizden Emin misiniz?", "Onay", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (ext == DialogResult.Yes)
        {
            Application.Exit();

        }       
    }

这是因为应用程序本身阻止关闭(您的第一个代码段)。这会导致相同的问题,并使原始功能停止工作。如果(!isClose)