Form Fade In/Out Effect and Notification Window

Introduction

Background processes, applications that run from the tray, and many other types of applications frequently need to show notification/alerts to the user. One of the common examples is Outlook 2003, which shows e-mail notification just over the system tray. This article is about a base class, TransDialog, that derives from Form and adds the fade in/out effect to any form. It also contains a notification form that derives from this TransDialog and shows notification over the system tray.

Using the Code

The project contains the following three forms/classes:

  1. TransDialog—Derives from System.Windows.Forms.Form and adds the fade in effect
  2. Notification—Derives from TransDialog and actually shows the notification
  3. Form1—Driver form used just for the demo

If you are just interested in adding the fade in/out effect, you can derive any TransDialog form as follows.

public class Notification : TransDialog
{
   #region Ctor, init code and dispose
   public Notification()
      : base(true)
   {
      InitializeComponent();
   }
   /* ... */
}

Passing true to the base class will ensure that when you call close on the Notification form, TransDialog will call Dispose and do the cleanup.

How TransDialog Works

TransDialog uses the layering (opacity) property of the form to add the fade in/out effect. At the Form Load event, the opacity of the form is set to 0 (completely transparent or invisible) and a m_clock timer is started. The m_bShowing variable is set to true. The timer is set to tick every 100 ms.

private void TransDialog_Load(object sender, EventArgs e)
{
   this.Opacity = 0.0;
   m_bShowing = true;
   m_clock.Start();
}

On every Tick event, as long as m_bShowing is true, the opacity is increased until is reaches 1 (completely opaque):

if (m_bShowing)
{
   if (this.Opacity < 1)
   {
      this.Opacity += 0.1;
   }
   else
   {
      m_clock.Stop();
   }
}

This gives the fade-in effect.

On the form closing event, the m_bShowing is set to false, the form closing is canceled, and the timer is started again. However, because this time m_bShowing is false, the opacity is decreased until 0 is reached (completely transparent). This gives the fade-out effect.

private void TransDialog_Closing(object sender, CancelEventArgs e)
{
   /* ... */
   m_origDialogResult = this.DialogResult;
   e.Cancel = true;
   m_bShowing = false;
   m_clock.Start();
   /* ... */
}

How Notification Works

The fade-in/out effect on the notification works just by deriving from TransDialog. To show the form at the correct location over the system tray, the following code is used in the load event handler:

private void Notification_Load(object sender, System.EventArgs e)
{
   /* ... */
   int screenWidth = Screen.PrimaryScreen.WorkingArea.Width;
   int screenHeight = Screen.PrimaryScreen.WorkingArea.Height;
   this.Left = screenWidth - this.Width;
   this.Top = screenHeight - this.Height;
   /* ... */
}


About the Author

Abhinaba Basu

Abhinaba loves coding for the sheer fun of it. He started programming in 1995 with BASIC and then moved through Cobol, Pascal, Prolog, C, C++, VisualBasic and VC++. He received a Bachelor of Technology degree from University of Calcutta in 2001. Abhinaba is originally from the City of Joy, Kolkata in India, but now codes and lives in Noida close to Delhi. His hobby is coding which also happens to be his job. Besides coding he loves traveling.

Downloads

Comments

  • Easy Home Shopee

    Posted by Easy Home Noida on 12/10/2014 01:15am

    Hi. Thanks for the article. I was just what I was looking for, but unfortunately I can't download the demo program or the source code.

    Reply
  • Few issues

    Posted by Saeed on 10/31/2008 12:30am

    First of all good work 2nd- Once you introduce static control into the form affects controls will not show .. 3rd why not just introduce [CODE} public static void FadeForm(System.Windows.Forms.Form f,bool FadeOut) { float v1 = 1.0F; float v2 = 0.0F; float vd = 0.1F; if (FadeOut) // fadeout { for (float v = v1; v >=v2; v -= vd) { f.Opacity = v; f.Refresh(); } f.Opacity = v2; } else // fadein { for ( float v=v2;v <= v1 ;v += vd) { f.Opacity = v; f.Refresh(); } f.Opacity = v1; } f.Refresh(); } [/CODE} to control the transpanacy . its much easier and simpler.

    Reply
  • looking for C or C++ solution to notification windows

    Posted by yuban on 09/24/2007 08:58pm

    I am trying to find any solution or documentation on the windows api ( if there is one ) for presenting a simple square notification window - such as "Updates are available". Would be nice to add an icon, etc. but even nicer to find documentation on presenting such a feature. Any suggestions ? thx

    Reply
  • Can't get source and demo files

    Posted by javanic on 12/13/2005 11:31am

    Hi. Thanks for the article. I was just what I was looking for, but unfortunately I can't download the demo program or the source code. The links try to open a get_file.php. Any ideas?

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • As all sorts of data becomes available for storage, analysis and retrieval - so called 'Big Data' - there are potentially huge benefits, but equally huge challenges...
  • The agile organization needs knowledge to act on, quickly and effectively. Though many organizations are clamouring for "Big Data", not nearly as many know what to do with it...
  • Cloud-based integration solutions can be confusing. Adding to the confusion are the multiple ways IT departments can deliver such integration...

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date