Modificar dinámicamente el icono de un NotifyIcon

3617 vistas

El objetivo es de poder modificar el NotifyIcon de la aplicación con el fin de, por ejemplo, mostrar un texto en función de diferentes circunstancias. El ejemplo simplemente irá mostrando en el objeto notifyIcon1 los segundos de un objeto DateTime. La procedure es bastante sencilla ya que se trata de trabajar vía un objeto Bitmap para la modificación y convertirlo en Icon para asignarlo a la propiedad notifyIcon1.Icon. Es muy importante no olvidarnos de destruir los iconos en memoria. El código siguiente sólo muestra lo esencial, faltará declarar y instanciar los objetos Font, Brush, Color y StringFormat necesarios



csharp
  1. ///<summary>
  2. /// Método privado timer1_Tick
  3. /// gestión del evento Tick de timer1
  4. ///</summary>
  5. private void timer1_Tick(object sender, EventArgs e)
  6. { 
  7.     // lanzamos actualización de NotifyIcon1 
  8.     this.UpdateNotiFyIcon(DateTime.Now.Second.ToString());
  9. } 
  10.  
  11. ///<summary> Método privado UpdateNotiFyIcon
  12. /// responsable de modificar notifyIcon1 dinámicamente
  13. ///</summary>
  14. ///<param name="texto">String : texto a mostrar
  15. ///</param>
  16. private void UpdateNotiFyIcon(String texto)
  17. { 
  18.     // redibujado de iconBitmap 
  19.     this.UpdateBitmap(texto); 
  20.     // recuperamos un icono a partir de iconBitmap 
  21.     Icon newIcon = Icon.FromHandle(this.iconBitmap.GetHicon()); 
  22.     // asignamos el nuevo icono de NotifyIcon1 
  23.     this.notifyIcon1.Icon = newIcon; 
  24.     // liberamos icono
  25.     newIcon.Dispose();
  26. } 
  27.  
  28. ///<summary> Método privado UpdateBitmap
  29. /// encargado de redibujar iconBitmap en función de un texto
  30. ///</summary>
  31. ///<param name="texto">String : texto a mostrar
  32. ///</param>
  33. private void UpdateBitmap(String texto)
  34. { 
  35.     Graphics g = Graphics.FromImage(this.iconBitmap); 
  36.     // asignamos color de fondo
  37.     g.Clear(this.iconBackColor); 
  38.     // dibujamos el texto
  39.     g.DrawString  (texto, this.iconFont, this.iconForeBrush, 14, 14, this.iconStringFormat); 
  40.     // liberamos objeto gráfico
  41.     g.Dispose();
  42. }