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
、それを外すとウィンドウが前面に出てきません。
編集: この問題は、OS とテーマに依存しているようです。この問題は Windows XP には存在しないようですが、仮想マシンが少し遅いため、わかりにくいです。Windows 7 Aero では、任意のオフスクリーン位置の問題が発生します。Windows 7 Basic/Classic では、タスク バーに最小化され、タスク バーの以前の位置から再表示されます (システム トレイではなく、実際にタスク バーに最小化されたかのように)。Vista ではテストしていません。任意のヒント?