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)