У меня есть очень типичное хакерское решение для сворачивания в системный трей на С#:
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. Какие-нибудь советы?