web-dev-qa-db-fra.com

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 était exécuté à l'aide de points d'arrêt. Cela ne montre également aucune erreur.

Que dois-je faire pour déboguer ceci car il ne génère pas d'erreurs et ne montre pas 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);
}
31
Ben

Vous n'avez pas spécifié d'icône à afficher dans la barre des tâches. Exécutez votre code dans LINQPad en ajoutant simplement notifyIcon.Icon = SystemIcons.Application avant l'appel de ShowBalloonTip. Notez également que vous devez appeler Dispose lorsque vous avez terminé votre instance NotifyIcon.

42
Matthew Ferreira

Matthew a identifié le problème, mais j'ai quand même eu du mal à rassembler toutes les pièces. J'ai donc pensé qu'un exemple concis fonctionnant tel quel dans LINQPad serait utile (et vraisemblablement ailleurs). Il suffit de référencer l’assemblage System.Windows.Forms et de coller ce code dans.

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();
22
Jeremy Cook

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
kombsh

ShowBalloonnTip prend le nombre de millisecondes. 3 millisecondes peut être trop rapide pour que vous puissiez même voir. Essayez quelque chose qui ressemble plus à 3000

Vous devrez peut-être transmettre un modèle de composant au constructeur. C'est ce que je vois dans tous les exemples. Désolé, ça fait longtemps que je ne l'utilise pas. Voir la première réponse ici:

NotifyIcon n'est pas affiché

1
AaronLS

Jetez un oeil à l'exemple ci-dessous http://msdn.Microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

Je vois des différences distinctes entre ce code et votre code. Vous avez omis de nombreux éléments, tels que créer une variable ComponentModelContainer et le transférer dans le constructeur de la variable NotifyIcon.

0
evanmcdonnal