6

I want to make an Application that only has a NotifyIcon. It doesn't need to have at all a "Main" Form. When I want to achieve something like this, I just create an invisible form and run it, but would there be a more "elegant" way of doing this, I'd like to know it.

How do you generally do this? This application can't be a Windows Service, as having the NotifyIcon and its Context Menus is important (each one of them will run a different command).

Thanks

devoured elysium
  • 101,373
  • 131
  • 340
  • 557

3 Answers3

4

Another approach is to use special ApplicationContext which will have only the controls you need: Creating a Tasktray Application.

Tony Edgecombe
  • 3,860
  • 3
  • 28
  • 34
Giorgi
  • 30,270
  • 13
  • 89
  • 125
2

Check out this blog post:

As it turned out it was so easy it was ridiculous. All you have to do create a class that is inherits the iContainer interface. When you create the instance of the notify icon, pass a container object.

It gives you the notify icon, but not a context menu.

ChrisF
  • 134,786
  • 31
  • 255
  • 325
  • @devoured - I don't know. I was going to post that I thought you did need a main form, but decided to do a search first - just to be sure. I came across the post I linked to and it seemed to answer your question. I haven't tried it myself yet. – ChrisF May 07 '10 at 13:00
  • Also, I didn't know you could just do Application.Run() and that'd make the application run an empty message loop. – devoured elysium May 07 '10 at 13:01
0

From the same blog post @ChrisF mentioned https://bluehouse.wordpress.com/2006/01/24/how-to-create-a-notify-icon-in-c-without-a-form/

The solution is more ridiculous than that …

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace DataUploader
{
        static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            NotifyIcon icn = new NotifyIcon();
            icn.Click += new EventHandler(icn_Click);
            icn.Visible = true;
            icn.Icon = new System.Drawing.Icon(@”SomeIcon.ico”);
            Application.Run();
        }

        static void icn_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}
Călin Darie
  • 5,937
  • 1
  • 18
  • 13