Как сделать так, чтобы приложение Windows Forms .NET отображалось в виде значка в трее?

Что нужно сделать, чтобы ваше приложение .NET отображалось на панели задач Windows в виде значка?

И как вы обрабатываете нажатие кнопки мыши на указанном значке?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
20
0
21 351
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете добавить компонент NotifyIcon из панели инструментов в свою основную форму.

Здесь есть такие события, как MouseDoubleClick, которые можно использовать для обработки различных событий.

Обновлено: вы должны убедиться, что вы установили для свойства Icon действительный файл .ico, если хотите, чтобы он правильно отображался в системном трее.

Хороший небольшой учебник по использованию класса NotifyIcon здесь: http://www.developer.com/net/csharp/article.php/3336751

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

Ответ принят как подходящий

Сначала добавьте в форму элемент управления NotifyIcon. Затем подключите значок уведомления, чтобы делать то, что вы хотите.

Если вы хотите, чтобы он был скрыт в лотке при минимизации, попробуйте это.

Private Sub frmMain_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    If Me.WindowState = FormWindowState.Minimized Then
        Me.ShowInTaskbar = False
    Else
        Me.ShowInTaskbar = True
    End If
End Sub

Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
    Me.WindowState = FormWindowState.Normal
End Sub

Иногда я использую текст с воздушным шаром, чтобы уведомить пользователя - это делается следующим образом:

 Me.NotifyIcon1.ShowBalloonTip(3000, "This is a notification title!!", "This is notification text.", ToolTipIcon.Info)

То, что вы пишете в 5 строках, можно было бы сделать более элегантно в одной строке: Me.ShowInTaskbar = (Me.WindowState! = FormWindowState.Minimized)

Elmue 05.04.2018 16:40

Это показывает и обрабатывает все комбинации щелчков мыши для NotifyIcon

Подробнее здесь: https://archive.codeplex.com/?p=notifyicon

Чтобы расширить Ответ Тома, я предпочитаю делать значок видимым, только если приложение свернуто. Для этого установите Visible = False для NotifyIcon и используйте приведенный ниже код.

У меня также есть код ниже, чтобы скрыть значок во время закрытия, чтобы предотвратить раздражающие значки призрак в трее, которые сохраняются после закрытия приложения.

Private Sub Form_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    If Me.WindowState = FormWindowState.Minimized Then
        Hide()
        NotifyIcon1.Visible = True
        NotifyIcon1.ShowBalloonTip(3000, NotifyIcon1.Text, "Minimized to tray", ToolTipIcon.Info)
    End If
End Sub

Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
    Show()
    Me.WindowState = FormWindowState.Normal
    Me.Activate()
    NotifyIcon1.Visible = False
End Sub

Private Sub Form_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    NotifyIcon1.Visible = False
    Dim index As Integer
    While index < My.Application.OpenForms.Count
        If My.Application.OpenForms(index) IsNot Me Then
            My.Application.OpenForms(index).Close()
        End If
        index += 1
    End While
End Sub

Если вы хотите добавить контекстное меню:

VB.NET: как сделать меню правой кнопкой мыши для значка в трее

Согласно статье (с модами для контекста):

Настройка формы для размещения контекстного меню значка в трее

  • В свойствах установите для FormBorderStyle значение None.
  • Установите для ShowInTaskbar значение False (потому что мы не хотим, чтобы значок отображался на панели задач, когда мы щелкаем правой кнопкой мыши значок в трее!).
  • Установите StartPosition на Manual.
  • Установите для TopMost значение True.
  • Добавьте ContextMenuStrip в свою новую форму и назовите ее как хотите.
  • Добавьте элементы в ContextMenuStrip (для этого примера просто добавьте один элемент с именем «Exit»).

Код формы будет выглядеть так:

Private Sub Form_Deactivate(sender As Object, e As EventArgs) Handles Me.Deactivate
    Me.Close()
End Sub

Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ContextMenuStrip1.Show(Cursor.Position)
    Me.Left = ContextMenuStrip1.Left + 1
    Me.Top = ContextMenuStrip1.Top + 1
End Sub

Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
    MainForm.NotifyIcon1.Visible = False
    End
End Sub

Затем я меняю событие мыши notifyicon на это (TrayIconMenuForm - это имя моей формы для предоставления контекстного меню):

Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
    Select Case e.Button
        Case Windows.Forms.MouseButtons.Left
            Show()
            Me.WindowState = FormWindowState.Normal
            Me.Activate()
            NotifyIcon1.Visible = False
        Case Windows.Forms.MouseButtons.Right
            TrayIconMenuForm.Show() 'Shows the Form that is the parent of "traymenu"
            TrayIconMenuForm.Activate() 'Set the Form to "Active", that means that that will be the "selected" window
            TrayIconMenuForm.Width = 1 'Set the Form width to 1 pixel, that is needed because later we will set it behind the "traymenu"
            TrayIconMenuForm.Height = 1 'Set the Form Height to 1 pixel, for the same reason as above
        Case Else
            'Do nothing
    End Select
End Sub

Другие вопросы по теме