Afficher une notification de ballon

j'essaie d'utiliser le code ci-dessous pour afficher une notification de ballon. J'ai vérifié qu'il est exécuté en utilisant des points d'arrêt. C'est aussi montrer aucune erreur.

Que dois-je faire pour corriger ceci puisqu'il ne s'agit pas d'erreurs de lancement et de ne pas montrer le ballon?

private void showBalloon(string title, string body)
{
    NotifyIcon notifyIcon = new NotifyIcon();
    notifyIcon.Visible = true;

    if (title != null)
    {
        notifyIcon.BalloonTipTitle = title;
    }

    if (body != null)
    {
        notifyIcon.BalloonTipText = body;
    }

    notifyIcon.ShowBalloonTip(30000);
}
30
demandé sur abatishchev 2012-11-14 08:30:25

5 réponses

Vous n'avez pas spécifié d'une icône à afficher dans la barre des tâches. En lançant votre code dans LINQPad, en ajoutant simplement notifyIcon.Icon = SystemIcons.Application avant l'appel à ShowBalloonTip j'ai pu obtenir la pointe à afficher. Notez également que vous devez appeler Dispose lorsque vous avez terminé avec votre NotifyIcon instance.

42
répondu Matthew Ferreira 2012-11-14 05:04:13

Matthieu a identifié le problème, mais j'ai quand même eu du mal à rassembler toutes les pièces. Donc j'ai pensé qu'un exemple concis qui fonctionne dans LINQPad as-is serait utile (et probablement ailleurs). Il suffit de faire référence à l'assemblage System.Windows.Forms et de coller ce code.

var notification = new System.Windows.Forms.NotifyIcon()
{
    Visible = true,
    Icon = System.Drawing.SystemIcons.Information,
    // optional - BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info,
    // optional - BalloonTipTitle = "My Title",
    BalloonTipText = "My long description...",
};

// Display for 5 seconds.
notification.ShowBalloonTip(5000);

// This will let the balloon close after it's 5 second timeout
// for demonstration purposes. Comment this out to see what happens
// when dispose is called while a balloon is still visible.
Thread.Sleep(10000);

// The notification should be disposed when you don't need it anymore,
// but doing so will immediately close the balloon if it's visible.
notification.Dispose();
17
répondu Jeremy Cook 2017-07-20 10:12:59

voir le code source ci-dessous.

using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Windows.Forms;

namespace ShowToolTip
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btBallonToolTip_Click(object sender, EventArgs e)
        {
            ShowBalloonTip();
            this.Hide();
        }

        private void ShowBalloonTip()
        {
            Container bpcomponents = new Container();
            ContextMenu contextMenu1 = new ContextMenu();

            MenuItem runMenu = new MenuItem();
            runMenu.Index = 1;
            runMenu.Text = "Run...";
            runMenu.Click += new EventHandler(runMenu_Click);

            MenuItem breakMenu = new MenuItem();
            breakMenu.Index = 2;
            breakMenu.Text = "-------------";

            MenuItem exitMenu = new MenuItem();
            exitMenu.Index = 3;
            exitMenu.Text = "E&xit";

            exitMenu.Click += new EventHandler(exitMenu_Click);

            // Initialize contextMenu1
            contextMenu1.MenuItems.AddRange(
                        new System.Windows.Forms.MenuItem[] { runMenu, breakMenu, exitMenu });

            // Initialize menuItem1

            this.ClientSize = new System.Drawing.Size(0, 0);
            this.Text = "Ballon Tootip Example";

            // Create the NotifyIcon.
            NotifyIcon notifyIcon = new NotifyIcon(bpcomponents);

            // The Icon property sets the icon that will appear
            // in the systray for this application.
            string iconPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\setup-icon.ico";
            notifyIcon.Icon = new Icon(iconPath);

            // The ContextMenu property sets the menu that will
            // appear when the systray icon is right clicked.
            notifyIcon.ContextMenu = contextMenu1;

            notifyIcon.Visible = true;

            // The Text property sets the text that will be displayed,
            // in a tooltip, when the mouse hovers over the systray icon.
            notifyIcon.Text = "Morgan Tech Space BallonTip Running...";
            notifyIcon.BalloonTipText = "Morgan Tech Space BallonTip Running...";
            notifyIcon.BalloonTipTitle = "Morgan Tech Space";
            notifyIcon.ShowBalloonTip(1000);
        }

        void exitMenu_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        void runMenu_Click(object sender, EventArgs e)
        {
            MessageBox.Show("BallonTip is Running....");
        }
    }
}
2
répondu kombsh 2013-12-11 16:38:20

ShowBalloonnTip prend le nombre de millisecondes. 3 millisecondes, c'est trop rapide pour que tu le Voies. Essayez quelque chose comme 3000

vous pourriez avoir besoin de passer un modèle de composant au contructeur. C'est ce que je vois dans tous les exemples. Désolé été un long temps depuis que je l'ai utilisé. Voir la première réponse ici:

notification ne comportant pas la mention

"
1
répondu AaronLS 2017-05-23 12:02:53

regardez l'exemple ici http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

je vois des Différences nettes entre lui et votre code, il y a beaucoup de pièces que vous laissez de côté comme la création d'un ComponentModelContainer et en passant que dans le NotifyIcon 's constructeur.

0
répondu evanmcdonnal 2012-11-14 06:02:47