Share via


C# Application System Tray Icon

Question

Wednesday, March 10, 2010 10:00 AM | 2 votes

Hi,

I am developing a C# application which has no forms and i need to have an icon in the system tray, which also has a context menu.

 it seems straight forward if a form exists, however my application does not have any forms....

Does anyone have any ideas?

Regards

James

All replies (4)

Wednesday, March 10, 2010 1:03 PM âś…Answered | 1 vote

As you said, as long as form is there , its strigh forward. The example mentioned above show, when Form is avilable.

I have tried this with a ConsoleApp, you can modify it accordingly.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;


namespace NotifyConsole
{
    class Program
    {
        private System.Windows.Forms.NotifyIcon notifyIcon1;
        private System.Windows.Forms.ContextMenu contextMenu1;
        private System.Windows.Forms.MenuItem menuItem1;
        private System.ComponentModel.IContainer components;


        static void Main(string[] args)
        {
            
            Program pg  = new Program();
            //pg.CreateNotifyicon();
            Application.Run();
            Console.ReadLine();
        }
        Program()
        {
            CreateNotifyicon();
        }
        private void CreateNotifyicon()
        {
            this.components = new System.ComponentModel.Container();
            this.contextMenu1 = new System.Windows.Forms.ContextMenu();
            this.menuItem1 = new System.Windows.Forms.MenuItem();
           
            // Initialize menuItem1
            this.menuItem1.Index = 0;
            this.menuItem1.Text = "E&xit";
            this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);

            // Initialize contextMenu1
            this.contextMenu1.MenuItems.AddRange(
                        new System.Windows.Forms.MenuItem[] { this.menuItem1 });
          
            // Create the NotifyIcon.
            this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);

            // The Icon property sets the icon that will appear
            // in the systray for this application.
            notifyIcon1.Icon = new Icon("Icon1.ico");

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

            // The Text property sets the text that will be displayed,
            // in a tooltip, when the mouse hovers over the systray icon.
            notifyIcon1.Text = "Console App (Console example)";
            notifyIcon1.Visible = true;

            // Handle the DoubleClick event to activate the form.
            notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
            notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);

        }
        private void notifyIcon1_Click(object Sender, EventArgs e)
        {
          
            MessageBox.Show("clicked");
        }

        private void notifyIcon1_DoubleClick(object Sender, EventArgs e)
        {
           MessageBox.Show("Double clicked");
        }

        private void menuItem1_Click(object Sender, EventArgs e)
        {
            // Close the form, which closes the application.
            Application.Exit();
        }

    }
}

Thanks Mike Please mark as answer if it is useful


Wednesday, March 10, 2010 10:05 AM

http://alanbondo.wordpress.com/2008/06/22/creating-a-system-tray-app-with-c/

http://www.developer.com/article.php/3336751

http://www.codeproject.com/KB/cs/NotifyIcon.aspx

check these examples


Wednesday, March 10, 2010 3:30 PM

Hi Mike,

Something strange is happening with the example...

basically my icon is appearing, however when i place my curser over it, it disappears.....

here is the code:

im calling it from a thread within the program class here:

 public static void Thread3()
       {
           
           new TaskbarIcon();

       }

here is the taskbaricon class:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;


namespace COPIT_Client_v1._0
{
    public class TaskbarIcon
    {
        private System.Windows.Forms.NotifyIcon notifyIcon1;
        private System.Windows.Forms.ContextMenu contextMenu1;
        private System.Windows.Forms.MenuItem menuItem1;
        private System.ComponentModel.IContainer components;

       
            
            

        public TaskbarIcon()
        {
            //TaskbarIcon pg = new TaskbarIcon();
            //Application.Run();
        
            
            CreateNotifyicon();

        
        
        }
        private void CreateNotifyicon()
        {
            this.components = new System.ComponentModel.Container();
            this.contextMenu1 = new System.Windows.Forms.ContextMenu();
            this.menuItem1 = new System.Windows.Forms.MenuItem();

            // Initialize menuItem1
            this.menuItem1.Index = 0;
            this.menuItem1.Text = "E&xit";
            this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
          



            // Initialize contextMenu1
            this.contextMenu1.MenuItems.AddRange(
                        new System.Windows.Forms.MenuItem[] { this.menuItem1 });

            // Create the NotifyIcon.
            this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);

            // The Icon property sets the icon that will appear
            // in the systray for this application.
            notifyIcon1.Icon = new Icon("favicon3.ico");

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

            
            
            
            // The Text property sets the text that will be displayed,
            // in a tooltip, when the mouse hovers over the systray icon.
          
            notifyIcon1.Visible = true;

            // Handle the DoubleClick event to activate the form.
            notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
            notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);

        }
        private void notifyIcon1_Click(object Sender, EventArgs e)
        {

            MessageBox.Show("clicked");
        }

        private void notifyIcon1_DoubleClick(object Sender, EventArgs e)
        {
            MessageBox.Show("Double clicked");
        }

        private void menuItem1_Click(object Sender, EventArgs e)
        {
            // Close the form, which closes the application.
            Application.Exit();
        }

    }
}

Thanks,

Regards

James


Wednesday, March 10, 2010 3:40 PM

:)) your application never waits for icon to display, it flashes and go...

 static void Main(string[] args)
        {
           
            Program pg  = new Program();
            //pg.CreateNotifyicon();
            Application.Run();->>>>>>>>>>>>>this will make application to process Messages
          **  Console.ReadLine();-.........................>>>** this will keep application in alive!!!
        }
you need to do something for making control alive. Otherwise, how you can see it?Thanks Mike Please mark as answer if it is useful