NotifyIcon en la barra de tareas de Windows con VB

Mostrar globos de información en el área de notificación de Windows 10 comparando su aspecto con el de versiones anteriores de Windows, en Visual Studio 2017

El área de notificación (systray) es esa zona junto al reloj en la que aparecen iconos de notificación. Desde VB .NET es sencillo colocar en este sitio el icono de nuestra aplicación y utilizarlo para mostrar información. El control requerido se llama NotifyIcon y se puede agregar y configurar desde el cuadro de herramientas en Visual Studio o mediante código.

Este control en versiones anteriores de Windows podía mostrar globos de texto de 2 formas diferentes:

  • NotifyIcon.Text: existe desde hace más tiempo en Windows por lo que su aspecto es más sencillo y sólo admite 64 caracteres de texto. Configurando la propiedad .Visible como False o como True se oculta y muestra el globo, lo que sirve para actualizar la información mostrada que es leída cada vez que aparece el globo pero no es actualizada sobre la marcha mientras el globo permanece a la vista
  • BallonTip es más moderno, tiene mejor aspecto y admite 255 caracteres de texto, se utiliza la propiedad BalloonTipText para definir el texto y el método ShowBalloonTip para mostrarlo.

El aspecto usando BallonTip era este:

En cambio con Text era este otro:

En Windows 10 podemos emplear también las 2 maneras de generar el texto informativo pero lo que ha cambiado radicalmente es el aspecto de las notificaciones que ahora son como se ve en la imagen al principio del artículo.

Código Visual Basic .NET

En el ejercicio referido a 2 formularios en hilos separados que puedes consultar aquí he añadido la notificación en la barra de tareas como un complemento para ilustrar este artículo. Se han añadido sendos controles NotifyIcon a los formularios para informar de cuándo se abre cada formulario y de cuándo se cierra desde un botón.

Al cargar cada formulario se muestra información:

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	'ocultar y mostrar el control para actualizar la información
	Me.NotifyIcon1.Visible = False
	Me.NotifyIcon1.Visible = True
	'definir el texto, admite referencias a variables
	Me.NotifyIcon1.BalloonTipText = "Form 2 abierto"
	'milisegundos que tardará en ocultarse el globo
	Me.NotifyIcon1.ShowBalloonTip(2000)
End Sub

Y al pulsar el botón Cerrar también:

'Cerrar este formulario sin salir de la aplicación.
Private Sub BotonCerrar2_Click(sender As Object, e As EventArgs) Handles BotonCerrar2.Click
	'ocultar y mostrar el control para actualizar la información
	Me.NotifyIcon1.Visible = False
	Me.NotifyIcon1.Visible = True
	'definir el texto, admite referencias a variables
	Me.NotifyIcon1.BalloonTipText = "Form2 cerrado"
	'milisegundos que tardará en ocultarse el globo
	Me.NotifyIcon1.ShowBalloonTip(2000)
	Me.Close()
End Sub

ShowBalloonTip admite una sobrecarga que evita el uso de BalloonTipText:

Me.NotifyIcon1.ShowBalloonTip(2000, "Info", "Form1 abierto", ToolTipIcon.Info)
'duración del globo en milisegundos + título + texto + tipo de icono

Si preferimos mostrar el globo cuando el usuario hace clic en el icono del área de notificación recurrimos al evento MouseClick del control NotifyIcon:

'mostrar la información al hacer clic en el icono del área de notificación
Private Sub NotifyIcon1_Mouse(sender As Object, e As MouseEventArgs) Handles NotifyIcon1.MouseClick
     Me.NotifyIcon1.ShowBalloonTip(2000, "Info", "Form1 abierto", ToolTipIcon.Info)
End Sub

Si en vez de BallonTip usamos la propiedad Text básica el código sería como éste:

Me.NotifyIcon1.Text = "Form2 cerrado"

Nota: Respecto a la duración de estos globos de diálogo hay que tener en cuenta que están gobernados por la configuración interna del sistema operativo por lo que no siempre es fácil conseguir que duren el tiempo deseado. Windows suele tener configurados estos tiempos en 10″ (mínimo) y 30″ (máximo).

Puedes descargar la aplicación completa desde aquí.