我有一个非常典型的 hackish 解决方案,用于在 C# 中最小化系统托盘:
private void MainFormResize(object sender, EventArgs e) {
if (FormWindowState.Minimized == this.WindowState) {
this.Hide();
systemTrayIcon.Visible = true;
}
}
private void systemTrayIconMouseDoubleClick(object sender, MouseEventArgs e) {
systemTrayIcon.Visible = false;
this.Show();
this.WindowState = FormWindowState.Normal;
}
理想情况下,我希望我的应用程序在最小化到系统托盘或从系统托盘重新打开时消失/重新出现。最小化到系统托盘按预期工作——窗口立即消失,并出现一个新的托盘图标。
但是,双击该图标会产生一些非常奇怪的效果。窗口经历了一个调整大小动画到它的位置——窗口似乎从屏幕的一个完全随机的角落飞入。
我不想要那个。我只想要Minimize > -Poof- Disappear
并且Double-click > -Poof- Appear
没有动画或延迟或任何类似的东西。
为什么这段代码有动画?如果我Form.Show()
在任何其他上下文中调用,窗口会自动显示为我想要的,但是当从 NotifyIcon 调用时,它的行为很奇怪。我认为这可能是这WindowState = FormWindowState.Normal
条线,但如果我删除它,窗口就不会被带到前台。
编辑:这个问题似乎与操作系统和主题有关。这个问题在 Windows XP 中似乎不存在,但很难说,因为我的虚拟机有点滞后。在 Windows 7 Aero 中,会出现任意离屏位置问题。在 Windows 7 Basic/Classic 中,它最小化到任务栏,并从其在任务栏中的旧位置重新出现(好像它实际上是最小化到任务栏,而不是系统托盘)。我还没有在 Vista 上测试过。有小费吗?