Как свернуть приложение windows forms

Многопоточные приложения на C++

bytestream 14.05.2025

C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .

Stack, Queue и Hashtable в C#

UnmanagedCoder 14.05.2025

Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .

Как использовать OAuth2 со Spring Security в Java

Javaican 14.05.2025

Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .

Анализ текста на Python с NLTK и Spacy

AI_Generated 14.05.2025

NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .

Реализация DI в PHP

Jason-Webb 13.05.2025

Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .

Обработка изображений в реальном времени на C# с OpenCV

stackOverflow 13.05.2025

Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .

POCO, ACE, Loki и другие продвинутые C++ библиотеки

NullReferenced 13.05.2025

В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .

Паттерны проектирования GoF на C#

UnmanagedCoder 13.05.2025

Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .

Создаем CLI приложение на Python с Prompt Toolkit

py-thonny 13.05.2025

Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .

Конвейеры ETL с Apache Airflow и Python

AI_Generated 13.05.2025

ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .

Сегодня рассмотрим немаловажную функцию многих программ — сворачивание в трей (для тех кто не знает это область где находятся системные часы, регулятор громкости и т.п.). Вещь это порой очень полезная, а главное удобная. Не будем тянуть время и перейдем к сути вопроса…


Создадим новый Windows Form Application и из панели ToolBox перетащим в наш проект элемент NotifyIcon. Имя по умолчанию для данного элемента «notifyIcon1», что определенно неудобно, поэтому переименуем его в «Tray».

Из свойств нашего элемента «Tray» в первую очередь обратим внимание на следующие:

Icon - Иконка нашего значка;
Text - Текст, который будет отображаться,
       если навести курсором на значок в трее;
Visible - Отображается ли значок в трее или нет;

Теперь щелкнем на элементе «Tray» два раза. В коде проекта создастся обработчик события двойного клика по значку в трее. Здесь нам необходимо написать код, который будет показывать нашу форму, если она находилась в свернутом виде:

private void Tray_MouseDoubleClick(object sender, MouseEventArgs e)
{
   if (this.WindowState == FormWindowState.Minimized) {
    this.Visible = true;
    this.ShowInTaskbar = true;
    this.WindowState = FormWindowState.Normal;
   }
}

Так же нам необходимо перегрузить метод сварачивания нашей формы. Для этого укажем ключевое слово «ovveride«, нажмем пробел, и из списка выберем метод «OnResize«. В данном методе напишем:

protected override void OnResize(EventArgs e)
{
   if (this.WindowState == FormWindowState.Minimized)
   {
     this.ShowInTaskbar = false;
     this.Visible = false;
   }
}

Все! Дело сделано! Теперь при сворачивании приложения, оно полностью исчезнет с экрана и останется лишь в трее. При двойном клике на значок в трее мы снова увидим нашу форму.

{lang: ‘ru’}

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

Итак. За работу с областью уведомлений (или треем) в С# отвечает класс NotifyIcon. В нем есть несколько полезных свойств, которые позволяют:

  • назначить значок (свойство Icon);
  • указать контекстное меню для значка (свойство ContextMenu);
  • определить тест-подсказку (свойство Text);
  • свойство Visible позволяет скрыть значок в трее.

Перед использованием его естественно следует «кинуть» на форму в визуальном редакторе или объявить в ручную.

Здесь представлен фрагмент кода небольшой программы, демонстрирующий реализацию сворачивания формы в трей:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

    using System;

    using System.Drawing;

    using System.Windows.Forms;

    namespace rosskyru

    {

        public partial class FormForTray : Form

        {

            ///

            /// конструктор формы

            ///

            public FormForTray()

            {

                InitializeComponent();

                //задаем всплывающий текст-подсказку (появляется при наведении указателя на иконку в трее)

                _notifyIcon.Text = «Текст-подсказка»;

                //устанавливаем значок, отображаемый в трее:

                //либо один из стандартных:

                //_notifyIcon.Icon = SystemIcons.Error;

                //либо свой из файла:

                _notifyIcon.Icon = new Icon(«favicon.ico»);

                //подписываемся на событие клика мышкой по значку в трее

                _notifyIcon.MouseClick += new MouseEventHandler(_notifyIcon_MouseClick);

                //подписываемся на событие изменения размера формы

                this.Resize += new EventHandler(FormForTray_Resize);

            }

            ///

            /// здесь хранится состояние окна до сворачивания (максимизированное или нормальное)

            ///

            private FormWindowState _OldFormState;

            ///

            /// обрабатываем событие клика мышью по значку в трее

            ///

            void _notifyIcon_MouseClick(object sender, MouseEventArgs e)

            {

                //проверяем, какой кнопкой было произведено нажатие

                if (e.Button == MouseButtons.Left)//если левой кнопкой мыши

                {

                    //проверяем текущее состояние окна

                    if (WindowState == FormWindowState.Normal || WindowState == FormWindowState.Maximized)//если оно развернуто

                    {

                        //сохраняем текущее состояние

                        _OldFormState = WindowState;

                        //сворачиваем окно

                        WindowState = FormWindowState.Minimized;

                        //скрываться в трей оно будет по событию Resize (изменение размера), которое сгенерировалось после минимизации строчкой выше

                    }

                    else//в противном случае

                    {

                        //и показываем на нанели задач

                        Show();

                        //разворачиваем (возвращаем старое состояние «до сворачивания»)

                        WindowState = _OldFormState;

                    }

                }

            }

            ///

            /// обрабатываем событие изменения размера

            ///

            void FormForTray_Resize(object sender, EventArgs e)

            {

                if (FormWindowState.Minimized == WindowState)//если окно «свернуто»

                {

                    //то скрываем его

                    Hide();

                }

            }

        }

    }

Надеюсь, что комментарии в коде объясняют все нюансы программы.

Она делает всего две вещи:

  • сворачивается и разворачивается из трея по щелчку левой кнопки мыши на значке в области уведомлений;
  • запоминает свое старое состояние и разворачивается сразу в него (т.е. если она была развернута на весь экран, а потом свернута в трей, то восстановится она снова на весь экран).

И, напоследок, архив с этим проектом.

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

Всем привет, сегодня учимся сворачивать в трей программу написанную в C#. Итак создаем новый проект «Приложение Windows Forms». Переходим в конструктор форм и жмем «панель инструментов». Ищем элемент «NotifyIcon»
 

и перетаскиваем его на нашу форму.
 

Как видите он появился с низу, и если по нему кликнуть снизу, откроются свойства.

В свойствах нас интересуют параметры: Text, Icon. В Text мы задаем тот текст, который будет показываться при наведении на иконку в трее, Icon — та самая иконка что будет показываться, поэтому обязательно сделайте (я делал в GIMP’е) или найдите в интернете.

Итак, теперь нам надо привязать к нашей форме код убирания окна в трей, показ нашей иконки и добавить разворачивание нашего окна. Кликните 2 раза по нашей форме, и мы перейдем из конструктора в класс нашей формочки.

Моя форма называется w1 и следовательно функция конструктора тоже называется w1, вот начала кода:

using System;
using System.Windows.Forms;

namespace FwLogger
{
    public partial class w1 : Form
    {
        public w1()
        {
            InitializeComponent();
         }
    }
}

Далее в конструктор класса мы добавляем код и все связанные с ним функции, и вот у нас получается:
 

        public w1()
        {
            InitializeComponent();
	    // делаем невидимой нашу иконку в трее
            notifyIcon1.Visible = false;
	    // добавляем Эвент или событие по 2му клику мышки, 
	    //вызывая функцию  notifyIcon1_MouseDoubleClick
            this.notifyIcon1.MouseDoubleClick += new MouseEventHandler(notifyIcon1_MouseDoubleClick);
	    
            // добавляем событие на изменение окна
            this.Resize += new System.EventHandler(this.Form1_Resize);
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
	    // проверяем наше окно, и если оно было свернуто, делаем событие        
	    if (WindowState == FormWindowState.Minimized)
            {
		// прячем наше окно из панели
                this.ShowInTaskbar = false; 
		// делаем нашу иконку в трее активной
                notifyIcon1.Visible = true;
            }
        }


        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
	    // делаем нашу иконку скрытой
            notifyIcon1.Visible = false;
	    // возвращаем отображение окна в панели
            this.ShowInTaskbar = true; 
	    //разворачиваем окно
            WindowState = FormWindowState.Normal;
        }

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Create windows iso file
  • Zabbix log file windows
  • Spb tv 4pda windows
  • Не удается войти в учетную запись администратора windows 10
  • Пропали скрытые значки на панели задач windows 10