Comment faire en sorte qu'une application Windows Forms .NET s'affiche sous forme d'icône de barre des tâches?
-
03-07-2019 - |
Question
Que faut-il faire pour que votre application .NET apparaisse dans la barre d'état système Windows sous forme d'icône?
Et comment gérez-vous les clics de souris sur cette icône?
La solution
Ajoutez d’abord un NotifyIcon . contrôle à la forme. Branchez ensuite l'icône Notify pour faire ce que vous voulez.
Si vous souhaitez masquer le contenu du bac, essayez ceci.
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
J'utilise parfois le texte en ballon pour avertir un utilisateur, en tant que tel:
Me.NotifyIcon1.ShowBalloonTip(3000, "This is a notification title!!", "This is notification text.", ToolTipIcon.Info)
Autres conseils
Vous pouvez ajouter le composant NotifyIcon de la boîte à outils à votre fiche principale.
Il existe des événements tels que MouseDoubleClick que vous pouvez utiliser pour gérer divers événements.
Modifier: vous devez vous assurer que vous définissez la propriété Icon sur un fichier .ico valide si vous souhaitez qu'elle s'affiche correctement dans la barre d'état système.
Joli petit didacticiel sur l’utilisation de la classe NotifyIcon ici: http: // www .developer.com / net / csharp / article.php / 3336751
Ajoutez le composant NotifyIcon à votre forme. Et utilisez ses événements pour gérer les clics de souris.
Ceci affiche et gère toutes les combinaisons de clic de souris pour NotifyIcon
Pour prolonger la réponse de Tom , j'aime rendre l'icône visible uniquement si l'application est réduite.
Pour ce faire, définissez Visible = False
pour NotifyIcon et utilisez le code ci-dessous.
J'ai également le code ci-dessous pour masquer l'icône lors de la fermeture afin d'éviter les icônes empêchant les fantômes ennuyeux qui persistent après la fermeture de l'application.
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
Si vous souhaitez ajouter un menu contextuel:
VB.NET: Créer un menu contextuel pour une icône de plateau
Selon l'article (avec mods pour le contexte):
Configuration du formulaire pour l'hébergement du menu contextuel de l'icône de la barre des tâches
- Dans les propriétés, définissez FormBorderStyle sur Aucun.
- Définissez ShowInTaskbar sur False (car nous ne voulons pas qu'une icône apparaisse dans la barre des tâches lorsque nous cliquons avec le bouton droit de la souris sur l'icône de la barre des tâches!).
- Définissez StartPosition sur Manuel.
- Définissez TopMost sur True.
- Ajoutez un ContextMenuStrip à votre nouveau formulaire et nommez-le comme vous le souhaitez.
- Ajoutez des éléments à ContextMenuStrip (pour cet exemple, ajoutez un seul élément appelé "Quitter").
Le code de formulaire derrière ressemblera à ceci:
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
Je modifie ensuite l'événement de souris notifyicon en ceci ( TrayIconMenuForm
est le nom de mon formulaire pour fournir le menu contextuel):
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