Как реализовать сворачивание в трей на C#

{lang: 'ru'}

Не так давно мне захотелось сделать так, чтобы моя программа могла сворачиваться в трей. Интересовал, как видно из заголовка, код на C#. Чтобы ускорить процесс, я вбил «сворачивание в трей C#» в Яндекс и по первой же ссылке получил более-менее подходящий ответ. Из любопытства было просмотрено еще несколько ссылок. Где-то (уже точно не вспомню, где именно), были представлены даже ссылки на проект с примером. Он был успешно скачан и изучен. Пример оказался рабочим, но естественно, одного лишь сворачивания мне стало мало и я решил добавить к нему еще пару, если так можно выразиться, «эффектов». Таких как:

  • мигание иконки в трее (как мигает QIP, когда есть непрочитанное сообщение)
  • появление всплывающего сообщения (а-ля сообщение uTorrent’а, что закачка завершена)
  • и, собственно, сворачивание в трей при загрузке (понятно, что это элементарно, но захотелось поиграться)

В скорости это было сделано. Код был изменен, добавлены подробные (даже слишком подробные) комментарии. Зато теперь даже если стукнет склероз, можно будет быстро вспомнить, что к чему:).

Итак, вот что получилось:

Также стоит не забыть про подписку на события (это делалось в графическом режиме, поэтому здесь будут фрагменты из файла Designer.cs):

Были использованы элементы управления NotifyIcon (находится в разделе стандартных элементов управления; требуется как раз для отображения иконки в трее ), Timer (в «компонентах»; для подсчета тиков) и ContextMenuStrip (соответственно, искать в категории «меню»; как видно из названия, это и есть контекстное меню).

Примечания: в таймере установлено значение в 450 миллисекунд (что на глаз очень близко к частоте мигания в QIP).


Что делает эта простая программа:

  1. при загрузке сразу сворачивается в трей
  2. «мигает» в трее , чередуя между собой два стандартных значка
  3. сворачивается-разворачивается из/ в трей по клику левой кнопки мыши на значке
  4. после сворачивания выдает всплывающее сообщение из трея «я свернулась:)»
  5. при нажатии правой кнопки мыши выводит контекстное меню с пунктом «Выход», по нажатии на который приложение закрывается
  6. рисует системную иконку на самой форме

Вот архив с этим решением: скачать.

Дополнительных комментариев к коду, думаю не требуется, ибо все есть в MSDN, причем на русском. Можно просто открыть проект, ткнуть в нужный элемент, нажать F1 и получить ответ в справке Microsoft:)

Этот пост публикуется возможно даже больше «для себя», просто, чтобы не забыть и знать, где искать, если что. Однако, надеюсь, что он пригодится и кому-нибудь кроме меня.

P.S.: Сколько же мороки у разработчиков при составлении документации к проектам, если описание такой примитивной программы занимает столько времени и места…


Полезная статья? Их будет больше, если вы поддержите меня!


  • Юрий

    Молодчина! Отличная помощь для столкнувшихся с такой проблемой. Архив оказался весьма кстати, поскольку из куска кода понять все не получилось.