Comment faire en sorte qu'une application Windows Forms .NET s'affiche sous forme d'icône de barre des tâches?

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

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?

Était-ce utile?

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

Plus ici: https://archive.codeplex.com/?p=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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top