У меня есть очень типичное хакерское решение для минимизации в системный трей в 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. Любые советы?