Skip Navigation LinksHome > Categories > Code from a Category

Create a System Tray Application in VB.NET

User Name: codelecturer
Name: Mike Chauhan
Contact Me:
Home Page:
6 years of total IT experience including programming, application development, System Maintenance . 3 years of Experienced and expertise in .Net Framework VB, Visual Basic.Net, ASP.Net 2.0, 3.5 and AD... [More]
Viewed Times: 2182
Add Date: 10/17/2012
In this article we will learn how to create a System Tray Application in VB.Net
This article was prompted by a question in Quick Answers about how to write a VB.NET application that started in the tray.

As C# programmers know, applications start with a call to System.Windows.Forms.Application.Run. This call is normally hidden from VB.NET programmers, with the compiler supplying the required code behind the scenes. We can call this explicitly, however, which allows us to write applications that do not rely on start-up forms.

The first step is to create a class that inherits from System.Windows.Forms.ApplicationContext. This provides the information needed by the Operating System to manage your application. This is also where you instantiate your NotifyIcon for the system tray, a menu to interact with the icon and any other essentials.

This is pretty straightforward. The icon and menus are initialized in the class' Sub New, and the icon is made visible. The ThreadExit is where you clean up objects created within the class. The class also handles the Click event for mnuDisplay, which displays a dialog form, and mnuExit, which closes the application. Double clicking on the icon has the same effect as clicking mnuDisplay.

OtherMethods Module
I put the methods ExitApplication and ShowDialog in a separate code file.

The module is tagged as Friend to prevent it from being exported. ExitApplication is where you would clean up any objects that are external to AppContext. Your application shuts down with the call to Application.Exit, which triggers AppContext's ThreadExit event. If you have any open forms, Application.Exit will close those down, exactly as you would expect.

ShowDialog displays a simple dialog box that allows the user to either cancel the form or close the application. I had to do a bit of extra work to guarantee that one and only one dialog box gets displayed: clicking mnuDisplayForm will happily spawn multiple forms otherwise.

Main Method
The next step is to write the code that launches your application. In a public module, declare one of four variations of the Main method.

In most cases, version 1 will be sufficient. If you need access to the command line, then you will want to use version 2. Versions 3 and 4 allow you to return an integer value to the Operating System when your application closes, which is useful only in rare situations.

The call to Application.Run is the key here. There are three overloads: instead of an ApplicationContext, you can also pass a Form object or no parameter. The no parameter version creates a default context which is useful for console applications. The Form version is what VB normally uses internally. You can conditionally call different versions of Application.Run, like so:

With this, you can use a command line switch to decide whether your app will launch with a main form or into the notification area.

Note that the first line of code is Application.EnableVisualStyles. For reasons explained below, it is necessary to turn visual styles off when configuring your project; this is where you turn them back on. You don't have to do this, of course, but if your app has any interface elements, they will look nicer if you do.

The last step is to configure your project to use the Main method. Start by pulling up the My Project interface. On the Application tab, uncheck the "Enable application framework" box. This disables various application framework properties, including the XP visual styles (which is why we need to turn them back on). Now, go to the "Startup object" drop-down and select Sub Main. Be aware that you will select Sub Main even if you are using one of the Function Main methods.

When you run your application, the bootstrap will now call Main. Your custom context class will be launched, which sets up an interactive icon in the notification area.

Happy Programming!!!

Post a Comment

Name: (Optional)
Email: (Optional, you can get an email if somebody replys your comments)*
Email me if somebody respons my comment below:
Enter Text
as Below:
(case insensitive, if hard to read, click the "get a new one" button)
* Your email address will not be shared with any third parties for any reason.
** Maximum 1000 charactors.