Змінюй хід війни! Допомагай ЗСУ!

c# winforms: сворачивание формы в трей вместо закрытия

  • Автор теми Автор теми Kvest
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 30.03.2007
Повідом.: 1279
c# winforms: сворачивание формы в трей вместо закрытия

Хочу сделать так чтобы при закрытии формы нажатием на крестик в бордере форма сворачивалась в трей а не закрывалась. Сделал так:

private void Closing(object sender, FormClosingEventArgs e)
{
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
e.Cancel = true;
}

Понятное дело, прикрутив обработчик к событию. Но проблема в том что это работает только 1 раз!!! Я закрываю форму, она сворачивается в трей (всё правильно). После этого я её разворачиваю, бла-бла-бла... и в следующий раз при закрытии она уже не сворачивается а полностью закрывается Причем обработчик второй раз уже не выполняется при закрытии формы. Почему так? Есть подозрение что это из-за e.Cancel = true;, наверное каким-то образом оно деактивирует событие FromClosing, так что оно больше не обрабатывается. Но как его вновь активировать после восстановления формы непонятно.
 
Хочу сделать так чтобы при закрытии формы нажатием на крестик в бордере форма сворачивалась в трей а не закрывалась. Сделал так:

private void Closing(object sender, FormClosingEventArgs e)
{
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
e.Cancel = true;
}

Понятное дело, прикрутив обработчик к событию. Но проблема в том что это работает только 1 раз!!! Я закрываю форму, она сворачивается в трей (всё правильно). После этого я её разворачиваю, бла-бла-бла... и в следующий раз при закрытии она уже не сворачивается а полностью закрывается Причем обработчик второй раз уже не выполняется при закрытии формы. Почему так? Есть подозрение что это из-за e.Cancel = true;, наверное каким-то образом оно деактивирует событие FromClosing, так что оно больше не обрабатывается. Но как его вновь активировать после восстановления формы непонятно.

попробуй добавить событие Form.Shown, которое будет добавлять на форму твое событие Form.Closing
 

спасибо, помогло. Но всё таки интересно, как эти две строчки:
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
повлияли на судьбу обработчика FromClosing, что он выполнялся только раз :confused:
 
повлияли на судьбу обработчика FromClosing, что он выполнялся только раз
Я попробовал твой вариант и обработчик также срабатывал всегда.
Только первый раз окно убралось совсем, а следующие - оставалось свернутое окно вне таск бара. Наверно из-за этого - ShowInTaskbar = false;
Если вообще не срабатывал, то причина где_то_еще
 
Назад
Зверху Знизу