1. Размещаем компонент NotifyIcon на форме. У меня в приложении одна форма главная, остальные даже в таскбаре не отображаются, на главную форму и положил. NotifyIcon находится в ToolBox, вместе со всеми контролами... Параметры этого NotifyIcon говорят сами за себя, правда если не задать иконку, то в трее вообще ничего не появится :)
2. Маленько изменяем поведение формы. Для программ размещающихся в трее принято при сворачивании убирать окно из таскбара, а при щелчке на иконке в таскбаре - разворачивать. Поэтому пишем следующие обработчики:
- для сворачивания формы (эвент Form.Resize)
- private void MainForm_Resize(object sender, EventArgs e)
- {
- if (FormWindowState.Minimized == WindowState) Hide();
- }
* This source code was highlighted with Source Code Highlighter.
- и для клика по иконке в трее (эвент NotifyIcon.Click)- private void notifyIcon_Click(object sender, EventArgs e)
- {
- Show();
- WindowState = FormWindowState.Normal;
- }
* This source code was highlighted with Source Code Highlighter.
3. Изменим поведение при попытке юзера закрыть окно по крестику. Для этого используем обработчик эвента Form.Closing:- private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (e.CloseReason == CloseReason.UserClosing)
- {
- e.Cancel = true;
- Hide();
- WindowState = FormWindowState.Minimized;
- }
- }
* This source code was highlighted with Source Code Highlighter.
То есть, при щелчке по крестику наша форма просто свернется вниз, а завершение программы будет отменено. Правда на текущий момент эту программу можно только прибить из менеджера задач, что не очень хорошо. Поэтому:4. Сделаем контекстное меню для иконки в трее. Компонент ContextMenuStrip размещаем на нашей форме, создаем в нем пункт "Выход" (и какие ещё необходимо). Затем скажем нашему NotifyIcon, что у него есть контекстное меню с помощью свойства NotifyIcon.ContextMenuStrip. А обработчик пункта "Выход" у нас будет таким:
- private void miClose_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
* This source code was highlighted with Source Code Highlighter.
То есть CloseReason в данном случае будет ApplicationExitCall.Вот и всё. Приложение должно вполне успешно справляться со своей задачей "лежания" в трее.
Спасибо за информацию, пригодилось)
ОтветитьУдалить