Show progress using the NotifyIcon application tray icon






3.06/5 (7 votes)
Mar 9, 2007
2 min read

62641

660
Sample code to dynamically change the NotifyIcon application system tray Icon, to show the progress of a simulated process.
Introduction
Say we have a process that takes a lot of time to complete - wouldn't it be helpful to add a NotifyIcon control (hidden from our main form, so we do not bother the user until we are done) to show the progress in the system tray Icon area? Here is a simple code to achieve this, by drawing some text in the application system tray Icon dynamically.
Using the code
- Click File -> New -> Project. Create a ChangeIcon Visual C# Windows Application Project
- Click View -> Toolbox.
- From the Toolbox, drag a ContextMenu item into the Form1 form.
- Click in the Context Menu menu item, appearing at top of the form, change
Type Here, with
&Show
. Press Enter. - Double-click the newly created Show menu item.
- Change the menuItem1_Click method with:
Double-click the startButton button. Replace the startButton_Click
method with:
private void menuItem1_Click(object sender, System.EventArgs e)
{
this.Show();
}
- From the Toolbox, drag a NotifyIcon into the Form1 form.
- Right Click the
NotifyIcon1
NotifyIcon -> Properties. Set the property name totrayIcon
. Click in the Icon property, push the button which appears next to it, and browse for the App.ico within the Wizard created ChangeIcon folder. Finally, set the ContextMenu property tocontextMenu1
. - From the Toolbox, drag a ProgressBar into the Form1 form. Set the Dock property to Top.
- From the Toolbox, drag a Button into the Form1 form. Change the text property to Start, and the name to startButton.
- From the Toolbox, drag another Button into the Form1 form. Change the text property to Hide, and name to hideButton.
- From the Toolbox, drag a Timer to the form.
Double-click the startButton button. Replace the startButton_Click
method with:
private void startButton_Click(object sender, System.EventArgs e)
{
//
timer1.Enabled = true;
startButton.Enabled = false;
//
progressBar1.Value = progressBar1.Minimum;
progressBar1.Step = 1;
}
Double-click the hideButton button. Replace the hideButton_Click
method with:
private void hideButton_Click(object sender, System.EventArgs e)
{
this.Hide();
}
Double-click the Timer1 timer. Replace the timer1_Tick
method with:
private void timer1_Tick(object sender, System.EventArgs e)
{
if (progressBar1.Value == progressBar1.Maximum)
{
timer1.Enabled = false;
startButton.Enabled = true;
}
else
{
//
progressBar1.PerformStep();
//
string text = "Ok";
if (progressBar1.Value != progressBar1.Maximum)
text = progressBar1.Value.ToString();
//
System.Resources.ResourceManager resources = new
System.Resources.ResourceManager(typeof(Form1));
Bitmap bmp =( (System.Drawing.Icon)(resources.GetObject
("trayIcon.Icon"))).ToBitmap();
// Create an ImageGraphics Graphics object from bitmap Image
System.Drawing.Graphics ImageGraphics =
System.Drawing.Graphics.FromImage(bmp);
// Draw random code within Image
System.Drawing.Font drawFont = new System.Drawing.Font
("Arial Narrow", 20, FontStyle.Regular);
System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush
(System.Drawing.Color.Blue);
//
System.Drawing.StringFormat drawFormat =
new System.Drawing.StringFormat();
ImageGraphics.DrawString(text,drawFont, drawBrush, -2, 1, drawFormat);
//
// Dispose used Objects
//
drawFont.Dispose();
drawBrush.Dispose();
ImageGraphics.Dispose();
//
trayIcon.Icon = Icon.FromHandle(bmp.GetHicon());
trayIcon.Text = text;
}
}
Finally, press (F5). That's it!