当表单最小化到托盘时右键单击

本文关键字:右键 单击 表单 最小化 | 更新日期: 2023-09-27 17:56:07

我重写了 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 退出程序有关,因为我现在无法关闭我的应用程序,因为我提到的更改)。当应用程序退出时,在我将其最小化到托盘后,图标将留在托盘中,直到我用鼠标越过它。我该如何解决它?

当表单最小化到托盘时右键单击

只需添加一个变量,指示上下文菜单请求关闭。 说:

    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(),这可能会导致应用程序类迭代 OpenForms 集合时出现问题。 留下幽灵图标的可能原因。 无需帮助。