我重写了FormClosing事件,以便在单击时最小化到系统托盘。这是我的代码:
private void OnFormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
this.Hide();
notifyIcon.BalloonTipText = "Server minimized.";
notifyIcon.ShowBalloonTip(3000);
}
else
{
this.Close();
}
}
我还设置了notifyIcon的DoubleClick事件,这里是代码:
private void showWindow(object sender, EventArgs e)
{
Show();
WindowState = FormWindowState.Normal;
}
我有两个问题:
1)现在,当单击右上角的“X”按钮时,应用程序最小化到托盘,但我无法关闭它(有意义......)。我想点击右键点击系统托盘中的图标,它会打开一个菜单,比如说,这些选项:恢复,最大化和退出。
2)(这可能与我使用shift + f5退出程序有关,因为我现在不能因为我提到的更改而关闭我的应用程序)。 当应用程序退出后,将其最小化到托盘后,图标将保留在托盘中,直到我用鼠标将其移过。 我该如何解决?
答案 0 :(得分:0)
只需添加一个变量,指示上下文菜单请求关闭。说:
private bool CloseRequested;
private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
CloseRequested = true;
this.Close();
}
protected override void OnFormClosing(FormClosingEventArgs e) {
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.UserClosing && !CloseRequested) {
e.Cancel = true;
this.Hide();
}
}
确保不在FormClosing事件处理程序中调用Close(),这会在Application类迭代OpenForms集合时造成麻烦。你留下鬼图标的可能原因。无需帮助。