在本页的某处,我读到“覆盖”最小化方法的最佳方法是使用onResize()
事件。
我做到了,它的确有效!我已经编码,当窗体最小化时,它变得不可见,并在窗口托盘中放置一个图标。到目前为止一切工作正常,但我还编程(或至少试过它),当点击Windows托盘中的图标时,表单再次变为可见,但它不起作用,我不知道为什么。
我已经尝试对这两个事件进行编码(Click和MouseClick),但两者中的代码相同,但仍然无法正常工作,所以我一定做错了,但是我很不清楚。
请记住,我想要的是在windows托盘图标上编码click事件,而不是在任务栏图标上编码,所以也许这就是为什么它不起作用,也许是另一个事件。
这是我的代码:
private void onResize(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
notifyIcon1.Visible = true;
this.Visible = false;
}
private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
{
this.ShowInTaskbar = true;
this.Visible = true;
}
private void notifyIcon_Click(object sender, EventArgs e)
{
this.ShowInTaskbar = true;
this.Visible = true;
}
感谢。
编辑:问题是我刚刚将图像分配给Form构造函数上的图标,如notifyIcon1.Icon = new Icon("greenCircle.ico");
,但我没有初始化notifyIcon属性上的任何图像...通过在notifyIcon属性上初始化图像工作得很好!
答案 0 :(得分:1)
您可能不希望在调整大小时隐藏它,只要它们最小化表单:
private void onResize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized) // only hide if minimizing the form
{
this.ShowInTaskbar = false;
notifyIcon1.Visible = true;
this.Visible = false;
}
}
要再次显示最小化的表单,您需要将其还原:
private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
{
this.ShowInTaskbar = true;
this.Visible = true;
WindowState = FormWindowState.Normal;
}
答案 1 :(得分:1)
this.ShowInTaskbar = true;
this.Visible = true;
这不符合你的期望。 Windows中一个棘手的问题困扰着许多程序员。 ShowInTaskbar属性是“特殊的”,大多数其他Form属性都不太可能。它在底层的CreateWindowEx()winapi函数中指定为样式位。还有其他类似属性,如FormBorderStyle,ControlBox,LeftToRight。每个对应一个样式位。
麻烦的是,更改属性需要Winforms执行相当多的体操,它会破坏本机窗口并重新创建它。这往往有副作用,你找到了一个。
只需交换这两个语句,您就会发现它的工作方式完全不同,现在它 设法让窗口再次可见。但仍然不顺利,它并不总是能够进入前景。
你可能会对看起来像一个巨大的bug感到困惑。真正的问题是你正在做一些大多数其他程序员从未做过的事情,总是一个很好的方法来解决其他人没有的问题。实际上,您根本不需要更改ShowInTaskbar属性。当您隐藏窗口时,任务栏按钮已经自动不可见,根本不需要帮助。
删除程序中的所有ShowInTaskbar分配以解决问题。