Share via


Notification Class

Implements Windows CE functionality for displaying and responding to user notifications.

Namespace: Microsoft.WindowsCE.Forms
Assembly: Microsoft.WindowsCE.Forms (in microsoft.windowsce.forms.dll)

Syntax

'Declaration
Public Class Notification
    Inherits Component
'Usage
Dim instance As Notification
public class Notification : Component
public ref class Notification : public Component
public class Notification extends Component
public class Notification extends Component
Not applicable.

Remarks

This class provides a managed implementation of the Windows CE notification functions. This class is supported only on the Pocket PC.

You can create notifications and then display them as needed using the Visible property. The InitialDuration property sets the time the message balloon initially displays. If you set InitialDuration to zero and Visible to true, the message balloon does not appear but its icon is available in the title bar for reactivation when clicked. The BalloonChanged event occurs whenever the balloon is shown or hidden, either programmatically using the Visible property or through user interaction.

In addition to plain text, you can create a user notification with HTML content in the message balloon. The HTML is rendered by the Pocket PC HTML control, and you can respond to values in an HTML form by parsing a response string provided by the ResponseSubmittedEventArgs class, through the Response property.

Cmd:2 Identifier

The identifier "cmd:2" has a special purpose in Windows CE and is used to dismiss notifications. If cmd:2 is the name of an HTML button or other element in a message balloon, the ResponseSubmitted event is not raised. The notification is dismissed, but its icon is placed on the title bar to be responded to at a later time.

Note

If a link or element has a name of "cmd:n", where n is any integer, the ResponseSubmitted event is not raised. However, it is recommended to use only cmd:2 as an identifier for dismissing notifications.

Example

The following code example shows how to display a notification and gather user input using HTML elements in the message balloon. This example uses a button to display the notification; however, notifications usually occur as a result of an event or process, such as a timer.

The scenario for this example is a notification to confirm downloading data to the device. The message balloon has the following elements:

  • SELECT list

  • Hyperlink

  • Check box

  • Submit button

  • Button named with cmd:2 identifier

Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports Microsoft.WindowsCE.Forms
Imports System.Reflection
Imports System.Text
Imports System.IO




Public Class Form1
   Inherits System.Windows.Forms.Form
   Private WithEvents Button1 As System.Windows.Forms.Button
   Private StatusBar1 As System.Windows.Forms.StatusBar
   
   Private WithEvents Notification1 As Microsoft.WindowsCE.Forms.Notification
   
   
   Public Sub New()
      
      InitializeComponent()
      
      ConfigNotification()
      
      StatusBar1.Text = ""
      
      ' Display the OK button for closing the application.
      Me.MinimizeBox = False
   End Sub
    
   
   
   Protected Overrides Sub Dispose(disposing As Boolean)
      MyBase.Dispose(disposing)
   End Sub
   
   
   Private Sub InitializeComponent()
      Me.Button1 = New System.Windows.Forms.Button()
      Me.StatusBar1 = New System.Windows.Forms.StatusBar()
      Me.SuspendLayout()
      '
      ' Button1
      '
      Me.Button1.Location = New System.Drawing.Point(6, 134)
      Me.Button1.Name = "Button1"
      Me.Button1.TabIndex = 20
      Me.Button1.Text = "Notify"
      '
      ' StatusBar1
      '
      Me.StatusBar1.Location = New System.Drawing.Point(0, 246)
      Me.StatusBar1.Name = "StatusBar1"
      Me.StatusBar1.Size = New System.Drawing.Size(240, 22)
      Me.StatusBar1.Text = ""
      '
      ' Form1
      '
      Me.ClientSize = New System.Drawing.Size(240, 268)
      Me.Controls.Add(StatusBar1)
      Me.Controls.Add(Button1)
      Me.Name = "Form1"
      Me.Text = "Notify Demo"
      Me.ResumeLayout(False)
   End Sub
    
   
   Shared Sub Main()
      Application.Run(New Form1())
   End Sub
   
   
   Private Sub ConfigNotification()
      
      ' Create a Notification.
      Notification1 = New Microsoft.WindowsCE.Forms.Notification()
      
      Try
          'Provide an icon for the notification to appear in the title bar when dismissed.
          'Assumes an icon file is compiled with the assembly as an embedded resource.
          Dim asm As [Assembly] = [Assembly].GetExecutingAssembly()
         Notification1.Icon = New Icon(asm.GetManifestResourceStream("notify.ico"), 16, 16)
         
         Notification1.Caption = "Notification scenario - data download"

         ' If notification is urgent, set to true.
         Notification1.Critical = False

         
         ' Create the text for the notification.
         ' Use a StringBuilder for better performance.
         Dim HTMLString As New StringBuilder()
         
         HTMLString.Append("<html><body>")
         HTMLString.Append("<font color=""#0000FF""><b>Data ready to download</b></font>")
         HTMLString.Append("&nbsp;&nbsp;&nbsp;&nbsp;<a href=""settings"">Settings</a>")
         HTMLString.Append("<br><form method=""GET"" action=notify>")
         HTMLString.Append("<SELECT NAME=""lstbx"">")
         HTMLString.Append("<OPTION VALUE=""0"">Start now</OPTION><OPTION VALUE=""1"">In 1 hr</OPTION>")
         HTMLString.Append("<OPTION VALUE=""2"">In 2 hrs</OPTION><OPTION VALUE=""3"">In 3 hrs</OPTION>")
         HTMLString.Append("<OPTION VALUE=""4"">In 4 hrs</OPTION></SELECT>")
         HTMLString.Append("<input type=checkbox name=chkbx>Notify completion")
         HTMLString.Append("<br><input type='submit'>")
         HTMLString.Append("<input type=button name='cmd:2' value='Postpone'>")
         HTMLString.Append("</body></html>")
         
         ' Set the Text property to the HTML string.
         Notification1.Text = HTMLString.ToString()
      
      Catch ex As Exception
         MessageBox.Show(ex.Message)
      End Try
   End Sub
    
   
   
   
   ' Clicking the button creates a notification
   ' that initally displays for 20 seconds.
   Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
      Notification1.InitialDuration = 20
      Notification1.Visible = True
      StatusBar1.Text = ""
   End Sub
   
   
   ' You can use the BalloonChanged event
   ' created by tracking each time the notification is made visible.
   Private Sub OnBalloonChanged(obj As Object, _
     balevent As BalloonChangedEventArgs) Handles Notification1.BalloonChanged
      If balevent.Visible = True Then
       ' You can add code here to add 
       ' functionality such as user interface 
       ' changes that should occur when
       ' the notification is displayed.
      End If
   End Sub
   
   ' When a ResponseSubmitted event occurs, this event handler
   ' parses the response to determine values in the HTML form.
   Private Sub OnResponseSubmitted(obj As Object, _ 
      resevent As ResponseSubmittedEventArgs) Handles Notification1.ResponseSubmitted
      
      ' Use a StringBuilder to create a log of the response.
      Dim LogResponse As New StringBuilder()
      
      
      ' If the response contains the name specified for the action value
      ' of the HTML form, in this case "notify," get the value of the
      ' selected option from the SELECT list. An example of the
      ' response string would be notify?lstbx=0.
      If resevent.Response.Substring(0, 6) = "notify" Then
         Dim choice As Integer = Convert.ToInt32(resevent.Response.Substring(13, 1))
         Select Case choice
            Case 0
               LogResponse.Equals("submit")
            Case 1
               LogResponse.Equals("opt 1")
            Case 2
               LogResponse.Equals("opt 2")
            Case 3
               LogResponse.Equals("opt 3")
            Case 4
               LogResponse.Equals("opt 4")
         End Select
         ' If the checkbox in the form is checked, the response
         ' string could be as follows: notify?lstbx=0chkbx=on
         ' You can determine whether the check box is selected
         ' by checking whether the response ends with "on".
         If resevent.Response.EndsWith("on") Then
            LogResponse.Equals("checkbox")
         End If
      
      ' If the user clicked the settings link,
      ' log the response. This example could display
      ' a dialog box by activating another form.
      ElseIf resevent.Response = "settings" Then
         ' Display a settings dialog by activating
         ' a form named 'Settings':
         ' Settings.Activate
         LogResponse.Equals("Postponed by clicking link")
         
         ' The user needs to respond to the notification
         ' after checking the settings, so set the
         ' InitialDuration and Visible properties so
         ' that the icon appears in the title bar.
         Notification1.InitialDuration = 0
         Notification1.Visible = True
      End If
      
      ' Display the response on the status bar.
      StatusBar1.Text = LogResponse.ToString() + " HTML: " + resevent.Response.ToString()
   End Sub
End Class
using System;
using System.Windows.Forms;
using System.Drawing;
using Microsoft.WindowsCE.Forms;
using System.Reflection;
using System.Text;
using System.IO;

namespace notificationtest
{

    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.StatusBar statusBar1;

        private Microsoft.WindowsCE.Forms.Notification notification1;

        public Form1()
        {

            InitializeComponent();
            
            ConfigNotification();

            statusBar1.Text = "";

            // Display the OK button for closing the application.
            this.MinimizeBox = false;


        }

        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }

        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.statusBar1 = new System.Windows.Forms.StatusBar();
            this.SuspendLayout();
//
// button1
//
            this.button1.Location = new System.Drawing.Point(6, 134);
            this.button1.Name = "button1";
            this.button1.TabIndex = 20;
            this.button1.Text = "Notify";
            this.button1.Click += new System.EventHandler(this.button1_Click);
//
// statusBar1
//
            this.statusBar1.Location = new System.Drawing.Point(0, 246);
            this.statusBar1.Name = "statusBar1";
            this.statusBar1.Size = new System.Drawing.Size(240, 22);
            this.statusBar1.Text = "";
//
// Form1
//
            this.ClientSize = new System.Drawing.Size(240, 268);
            this.Controls.Add(this.statusBar1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Notify Demo";
            this.ResumeLayout(false);

        }

        static void Main()
        {
            Application.Run(new Form1());
        }

    private void ConfigNotification()
    {
            // Create a Notification.
            notification1 = new Microsoft.WindowsCE.Forms.Notification();
            
            try
            {
                    // Provide an icon for the notification to appear in the title bar when dismissed.
                    // Assumes an icon file is compiled with the assembly as an embedded resource.
                   Assembly asm = Assembly.GetExecutingAssembly();
                   notification1.Icon = new Icon(asm.GetManifestResourceStream("notify.ico"),16,16);
                   
                    notification1.Caption = "Notification scenario - data download";
                   
                    // If notification is urgent, set to true.
                    notification1.Critical = false;
                    
                    // Create the text for the notification.
                    // Use a StringBuilder for better performance.
                    StringBuilder HTMLString = new StringBuilder();

                    HTMLString.Append("<html><body>");
                    HTMLString.Append("<font color=\"#0000FF\"><b>Data ready to download</b></font>");
                    HTMLString.Append("&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"settings\">Settings</a>");
                    HTMLString.Append("<br><form method=\"GET\" action=notify>");
                    HTMLString.Append("<SELECT NAME=\"lstbx\">");
                    HTMLString.Append("<OPTION VALUE=\"0\">Start now</OPTION><OPTION VALUE=\"1\">In 1 hr</OPTION>");
                    HTMLString.Append("<OPTION VALUE=\"2\">In 2 hrs</OPTION><OPTION VALUE=\"3\">In 3 hrs</OPTION>");
                    HTMLString.Append("<OPTION VALUE=\"4\">In 4 hrs</OPTION></SELECT>");
                    HTMLString.Append("<input type=checkbox name=chkbx>Notify completion");
                    HTMLString.Append("<br><input type='submit'>");
                    HTMLString.Append("<input type=button name='cmd:2' value='Postpone'>");
                    HTMLString.Append("</body></html>");

                    // Set the Text property to the HTML string.
                    notification1.Text = HTMLString.ToString();

                    // Add event handlers.
                    
                    notification1.BalloonChanged += new BalloonChangedEventHandler(OnBalloonChanged);
                    notification1.ResponseSubmitted += new ResponseSubmittedEventHandler(OnResponseSubmitted);

            }
            
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
            
        }


        // Clicking the button creates a notification
        // that initally displays for 20 seconds.
        // A button is used here for demonstration purposes only;
        // normally, a notification is sent in response to another event.  
        private void button1_Click(object sender, System.EventArgs e)
        {
            notification1.InitialDuration = 20;
            notification1.Visible = true;
            statusBar1.Text = "";
        }

        // You can use the BalloonChanged event
        // created by tracking each time the notification is made visible.
        private void OnBalloonChanged(object obj, BalloonChangedEventArgs balevent)
        {
            if (balevent.Visible == true)
            {
                // You can add code here to add 
                // functionality such as user interface 
                // changes that should occur when
                // the notification is displayed.
            }

        }
        
        // When a ResponseSubmitted event occurs, this event handler
        // parses the response to determine values in the HTML form.
        private void OnResponseSubmitted(object obj, ResponseSubmittedEventArgs resevent)
        {

            // Use a StringBuilder to create a log of the response.
            StringBuilder LogResponse = new StringBuilder();


            // If the response contains the name specified for the action value
            // of the HTML form, in this case "notify," get the value of the
            // selected option from the SELECT list. An example of the
            // response string would be notify?lstbx=0.

            if (resevent.Response.Substring(0, 6) == "notify")
            {
                int choice = Convert.ToInt32(resevent.Response.Substring(13, 1));
                switch (choice)
                {
                    case 0:
                        LogResponse.Equals("submit");
                        break;
                    case 1:
                        LogResponse.Equals("opt 1");
                        break;
                    case 2:
                        LogResponse.Equals("opt 2");
                        break;
                    case 3:
                        LogResponse.Equals("opt 3");
                        break;
                    case 4:
                        LogResponse.Equals("opt 4");
                        break;
                }
                // If the checkbox in the form is checked, the response
                // string could be as follows: notify?lstbx=0chkbx=on
                // You can determine whether the check box is selected
                // by checking whether the response ends with "on".
                if (resevent.Response.EndsWith("on"))
                    LogResponse.Equals("checkbox");
            }

            // If the user clicked the settings link,
            // log the response. This example could display
            // a dialog box by activating another form.
            else if (resevent.Response == "settings")
            {
                // Display a settings dialog by activating
                // a form named 'Settings':
                // Settings.Activate
                LogResponse.Equals("Postponed by clicking link");

                // The user needs to respond to the notification
                // after checking the settings, so set the
                // InitialDuration and Visible properties so
                // that the icon appears in the title bar.
                notification1.InitialDuration = 0;
                notification1.Visible = true;
            }

            // Display the response on the status bar.
            statusBar1.Text = LogResponse.ToString() + " HTML: " + resevent.Response.ToString();
        }
    }
}

Inheritance Hierarchy

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
      Microsoft.WindowsCE.Forms.Notification

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Platforms

Windows Mobile for Pocket PC

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

Version Information

.NET Compact Framework

Supported in: 2.0

See Also

Reference

Notification Members
Microsoft.WindowsCE.Forms Namespace

Other Resources

How to: Send a Notification