Как сделать так, чтобы приложение Windows Forms .NET отображалось в виде значка на панели задач?
-
03-07-2019 - |
Вопрос
Что нужно сделать, чтобы ваше приложение .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