Pequeño tutorial que explica de una forma sucinta como se emplea el componente [NotifyIcon]
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
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]
Aspecto de la pantalla general del ejemplo
Aspecto que presenta el menu contextual
Aspecto que presenta el menu del formulario
Los componentes que tiene nuestra pequeña aplicación son:
Los componentes que tiene nuestra pequeña aplicación
Las propiedades del componente [NotifyIcon]son las siguientes
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
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\
El código, debidamente comentado que maneja todo eso, es el siguiente
#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 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
#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
#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
#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
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
© 1997 - - La Güeb de Joaquín | |||||
Joaquín Medina Serrano
|
|||||
|
Codificación | |
Fecha de creación | |
Última actualización |