我一直在尝试让我的表单最小化到通知区域。
以下代码继续运行,但我的表单从任务栏中消失,不会显示。
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();
}
我该如何解决这个问题?
答案 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分配后移动它,那么窗口将无法正常恢复。