NotifyIcon (Clase)

Descripción general

Pequeño tutorial que explica de una forma sucinta como se emplea el componente [NotifyIcon]

[TOC] Tabla de Contenidos


↑↑↑

NotifyIcon (Clase)


↑↑↑

Introduccion

Es un componente que crea un icono en el área de notificación.

Este icono sirve a modo de recordatorio de que tenemos un programa trabajando en segundo plano y permite recuperar el formulario y/o hacer péquelas operaciones con él (P.e. Restaurar. Terminar el programa.)

Comportamiento del componente [NotifyIcon]

Antes de hacer nada, tenemos que describiremos el comportamiento que queremos que tenga el formulario.

Para poder usar ese control hay que dar unos pequeños pasos


↑↑↑

Ejemplo paso a paso.

Para ilustra cómo se hace, vamos a escribir un pequeño programita, que muestre (sin ninguna sofisticación) la hora que es en Nueva Zelanda, y al que incluiremos toda la funcionalidad de un componente [NotifyIcon]


↑↑↑

La pantalla del programa será más o menos así:

Aspecto de la pantalla general del ejemplo

Aspecto de la pantalla general del ejemplo


↑↑↑

EL MENU Contextual es el siguiente

Aspecto que presenta el menu contextual

Aspecto que presenta el menu contextual


↑↑↑

El menú del formulario

Aspecto que presenta el menu del formulario

Aspecto que presenta el menu del formulario


↑↑↑

Componentes

Los componentes que tiene nuestra pequeña aplicación son:

Los componentes que tiene nuestra pequeña aplicación

Los componentes que tiene nuestra pequeña aplicación


↑↑↑

Propiedades del componente [NotifyIcon]

Las propiedades del componente [NotifyIcon]son las siguientes

Propiedades del componente [NotifyIcon]

Propiedades del componente [NotifyIcon]

Observa que se han modificado dos priopiedades.[ContextMenu] para darle el valor del enu contextual y la propiedad [Icon] para asignar el mismo icono que tiene el formulario


↑↑↑

Icono

Como puedes observar, se ha incluido un icono, el menú contextual. Es conveniente que ese mismo icono sea el que figure como icono del formulario con el que estamos trabajando

Tienes un montón de iconos en la carpeta Common7 de Visual Studio 10. A modo de ejemplo, en mi ordenador los iconos están en la siguiente dirección de mi disco duro

D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\3082\


↑↑↑

Un poco de codigo

El código, debidamente comentado que maneja todo eso, es el siguiente


↑↑↑

Manejo del componente NotifyIcon

#Region "Manejo del componente NotifyIcon"

    '---------------------------------------
    ''' <summary>
    '''  Funcion que se llama por los procesos que minimizan el formulario
    ''' </summary>
    ''' <remarks>
    '''  <para>  Las tareas que hace son:</para>
    '''  <para>  * Minimiza el formulario</para>
    '''  <para>  * Muestra el componente NotifyIcon</para>
    '''  <para>  * Oculta el formulario</para>
    '''  <para>
    '''     Las dos ultimas tareas se dejan
    '''     a la funcion que maneja (contiene) las tareas a realizar 
    '''     cuando se dispara el evento [Resize] del formulario, 
    '''     concretamente cuando el formulario se minimiza
    ''' </para>
    '''</remarks>
    Private Sub NotifyIconMinimizarForm()
        If Not (Me.WindowState = FormWindowState.Minimized) Then
            Me.WindowState = FormWindowState.Minimized
            '---------------------------------------
            ' Observacion
            '  El evento [FormMain_Resize] hace las sigientes tareas
            '  NotifyIcon1.Visible = True
            '  Me.Hide()
            '---------------------------------------
        End If
    End Sub


    ''' <summary>
    '''    Funcion que se llama por los procesos que restauran el form
    ''' </summary>
    ''' <remarks>
    '''  <para>  Las tareas que hace son:</para>
    '''  <para>  * Oculta el componente NotifyIcon</para>
    '''  <para>  * Restaura el formulario</para>
    '''  <para>  * Muestra el formulario</para>
    '''  <para>
    '''    ¡¡¡Cuidado!!! .. Esta funcion no debe llamarse 
    '''    por la funion que maneja el evento Resize del 
    '''    Formulario porque se producirian referencias circulares
    ''' </para>
    '''</remarks>
    Private Sub NotifyIconRestaurarForm()
        Me.NotifyIcon1.Visible = False
        Me.Show()
        Me.WindowState = FormWindowState.Normal
    End Sub


    ''' <summary>
    ''' Este es el mensaje emergente que se muestra cuando se 
    ''' pasa el cursor encima del icono en el área de notificación.
    ''' </summary>
    ''' <remarks>
    '''  <para> Se usa en las funciones:</para>
    '''  <para>   * LoadForm   </para>
    '''  <para>   * ResizeForm </para>
    '''</remarks>
    Const NotifyIconText As String = "Hora en Nueva Zelanda"


    ''' <summary>
    '''   Esta funcion se llama por el evento [FormMain_Load] del Form
    ''' </summary>
    ''' <remarks> 
    '''  <para>Solamente funciona si el formulario esta minimizado</para> 
    '''  <para>  Las tareas que hace son:</para>
    '''  <para>  * Oculta el componente NotifyIcon</para>
    '''  <para>  * Prepara el mensaje que se mostrara cuando se pase 
    '''            el cursor encima del icono en el área de notificación</para>
    '''</remarks>
    Private Sub NotifyIconLoadForm()
        ' Oculta el componente NotifyIcon 
         NotifyIcon1.Visible = False
        ' Este es el mensaje emergente que se muestra cuando se 
        ' pasa el cursor encima del icono en el área de notificación.
        ' Esta contenido en la variable [NotifyIconText]
        Me.NotifyIcon1.Text = NotifyIconText
    End Sub


    Private Sub NotifyIconResizeForm()
        If Me.WindowState = FormWindowState.Minimized Then
            ' Solamente si estamos minimizando el formulario
            NotifyIcon1.Visible = True
            ' Este es el mensaje que sale en el área de notificación
            ' cuando se minimiza el formulario
            Me.NotifyIcon1.ShowBalloonTip( _
                3000, "Informacion", _
                "Muestra la hora en otros husos horarios", ToolTipIcon.Info)
            ' Este es el mensaje emergente que se muestra cuando se 
            ' pasa el cursor encima del icono en el área de notificación.
            ' Esta contenido en la variable [NotifyIconText]
            Me.NotifyIcon1.Text = NotifyIconText
            ' se oculta el formulario (ya minimizado)
            Me.Hide()
        End If
    End Sub

Puedes ver el efecto de las dos últimas líneas de código en las siguientes imágenes

Texto que se muestra al minimizar el formulario

Texto que se muestra al minimizar el formulario

Texto que se muestra al pasar el cursor sobre el icono

Texto que se muestra al pasar el cursor sobre el icono

''' <summary>
'''   Esta funcion debe llamarse por el evento [FormClosing] del formulario
''' </summary>
''' <remarks> 
'''  <para>  Las tareas que hace son:</para>
'''  <para>  * Oculta el componente NotifyIcon</para>
'''  <para>
'''    Sirve para evitar que quede el [NotifyIcon] visible en 
'''    el área de notificación con los demas iconos despues 
'''    de que ha terminado la ejecucion del programa
''' </para>
''' </remarks>
Private Sub NotifyIconClosingForm()
    Me.NotifyIcon1.Visible = False
End Sub


↑↑↑

Escuchadores de eventos

#Region "Escuchadores de eventos"

    ' El evento [FormClosing] del formulario
    ' Debe encargarse de que el icono del componente [NotifyIcon] se oculte 'para siempre' :-))
    Private Sub Form1_FormClosing( _
            ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) _
            Handles Me.FormClosing
        Call NotifyIconClosingForm()
    End Sub

    ' El evento [Resize] del formulario
    ' Si el formulario se minimiza, debe activar la funcionalidad del componente [NotifyIcon]
    Private Sub FormMain_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Call NotifyIconResizeForm()
    End Sub
    ' El evento [MouseDoubleClick] del componente NotifyIcon
    ' Debe mostrar el formulario
    Private Sub NotifyIcon1_MouseDoubleClick_1( _
           ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
           Handles NotifyIcon1.MouseDoubleClick
        Call NotifyIconRestaurarForm()
    End Sub

#End Region


↑↑↑

Menu contextual

#Region "Menu contextual"

    ' Opción de  Menú contextual: 'Restaurar' el formulario
    Private Sub RestaurarToolStripMenuItem_Click( _
            ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles RestaurarToolStripMenuItem.Click
        Call NotifyIconRestaurarForm()
    End Sub

    ' Opción de Menú contextual: 'Ocultar' o 'Minimizar' el formulario
    Private Sub OcultarToolStripMenuItem_Click( _
            ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles OcultarToolStripMenuItem.Click
        Call NotifyIconMinimizarForm()
    End Sub

    ' Opción de Menú contextual: 'Cerrar' el formulario
    Private Sub SalirToolStripMenuItem_Click( _
            ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles SalirToolStripMenuItem.Click
        Me.Close()
    End Sub

#End Region


↑↑↑

Menú del formulario

#Region "Menú del formulario"

    ' Opción de Menú: 'Ocultar' o 'Minimizar' el formulario
    Private Sub MinimizarToolStripMenuItem_Click( _
            ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles MinimizarToolStripMenuItem.Click
        Call NotifyIconMinimizarForm()
    End Sub

    ' Opción de  Menú: 'Cerrar' el formulario
    Private Sub SalirToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles SalirToolStripMenuItem1.Click
        Me.Close()
    End Sub

#End Region


↑↑↑

Funcionalidad del formulario

Y por ultimo… el código que hace que se muestren las horas de España y Nueva Zelanda… que como puedes ver es muy sofisticado :))

#Region "Funcionalidad para mostrar la hora"


    Dim provider As IFormatProvider = System.Globalization.CultureInfo.CreateSpecificCulture("es-ES")
    Const cadenaFormato As String = "{0:00}:{1:00}:{2:00}"

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Dim horaCompletaNuevaZelanda As String
        Dim horaCompletaEspaña As String

        ' La hora de nueva Zelanda esta 14 horas por delante de la nuestra
        Dim horaNz As Integer = DateTime.Now.Hour
        horaNz = horaNz - 14
        If horaNz < 0 Then horaNz = horaNz + 24
        If horaNz > 24 Then horaNz = horaNz - 24

        ' formatear la hora en una cadena
        horaCompletaEspaña = String.Format(provider, cadenaFormato, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second)
        horaCompletaNuevaZelanda = String.Format(provider, cadenaFormato, horaNz, DateTime.Now.Minute, DateTime.Now.Second)
        ' mostrar la cadena con la hora
        Me.TextBoxHoraEspaña.Text = horaCompletaEspaña
        Me.TextBoxHoraNuevaZelanda.Text = horaCompletaNuevaZelanda

        '-----------------------------------------------------------
        ' Este es el mensaje emergente que se muestra cuando se 
        ' pasa el cursor encima del icono en el área de notificación.
        Me.NotifyIcon1.Text = "Hora en Nueva Zelanda " & horaCompletaNuevaZelanda

    End Sub
#End Region

A continuación puedes ver el efecto que causa en el componente [NotifyIcon] la última línea de código de la función anterior

Falta el texto Alt de la imagen

↑↑↑

A.2.Enlaces

[Para saber mas]
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]
© 1997 - - La Güeb de Joaquín
Joaquín Medina Serrano
Ésta página es española

Codificación
Fecha de creación
Última actualización