将表单最小化到通知区域

时间:2015-12-14 15:32:23

标签: c# .net winforms

我一直在尝试让我的表单最小化到通知区域。

以下代码继续运行,但我的表单从任务栏中消失,不会显示。

protected override void OnResize(EventArgs e)
{

    base.OnResize(e);
    bool cursorNotInBar = Screen.GetWorkingArea(this).Contains(Cursor.Position);
    if(this.WindowState == FormWindowState.Minimized && cursorNotInBar)
    {
        this.ShowInTaskbar = false;
        notifyIcon1.Visible = true;
        this.Hide();
    }

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

此代码中有几个非常不愉快的交互。从ShowInTaskbar属性开始,它有许多副作用,因为它强制重新创建本机窗口。只是不要修补它,没有必要,因为隐藏窗口时任务栏按钮已被隐藏。 NotifyIcon.MouseDoubleClick事件也是胡思乱想,你必须正确地恢复窗口,以防止它隐藏在0x0大小。

这样做:

    protected override void OnResize(EventArgs e) {
        base.OnResize(e);
        if (this.WindowState == FormWindowState.Minimized && !notifyIcon1.Visible) {
            notifyIcon1.Visible = true;
            this.Hide();
        }
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) {
        this.Show();
        this.WindowState = FormWindowState.Normal;
        notifyIcon1.Visible = false;
        this.BringToFront();
    }

Show()方法的位置至关重要。如果在WindowState分配后移动它,那么窗口将无法正常恢复。