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

StackOverflow https://stackoverflow.com/questions/158895

Вопрос

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

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

Это было полезно?

Решение

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

ВБ.НЕТ:Как создать контекстное меню для значка в трее

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

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

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

Код формы будет выглядеть следующим образом:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top